• hdu 2112


    #include<stdio.h>
    #include<string.h>
    #define N 200
    #define inf 999999999999
    __int64 map[N][N],dis[N];
    char s[N][40];
    void dijkstra(__int64 s,__int64 t,__int64 n) {
        __int64 visit[N],u,min,i,j;
        for(i=0;i<n;i++) {
            visit[i]=1;
            dis[i]=map[s][i];
        }
        visit[s]=0;
        for(i=0;i<n-1;i++) {
            min=inf;
            for(j=0;j<n;j++)
                if(min>dis[j]&&visit[j]) {
                    min=dis[j];
                    u=j;
                }
                visit[u]=0;
                for(j=0;j<n;j++)
                    if(visit[j]&&map[u][j]<inf) {
                        if(dis[j]>dis[u]+map[u][j])
                            dis[j]=dis[u]+map[u][j];
                    }
                    }
    }
    int main() {
        __int64 t,n,m,count,kai,jie,i,j;
        char start[40],end[40],str[40],str1[40];
        while(scanf("%I64d",&n),n!=-1) {
            for(i=0;i<=160;i++) {
                dis[i]=inf;
                for(j=0;j<=160;j++)
                    map[i][j]=i==j?0:inf;
            }
            scanf("%s%s",start,end);
            count=0;
            while(n--) {
                scanf("%s%s%I64d",str,str1,&t);
                 for(i=0;i<count;i++)
                     if(strcmp(s[i],str)==0) {
                         kai=i;
                         break;
                     }
                     if(i==count) {
                         strcpy(s[count],str);
                         kai=count;
                         count++;
                     }
                     for(i=0;i<count;i++)
                         if(strcmp(s[i],str1)==0) {
                             jie=i;
                             break;
                         }
                         if(i==count) {
                             strcpy(s[count],str1);
                             jie=count;
    count++;
                         }
                         map[kai][jie]=map[jie][kai]=t;
            }
    kai=-1;
    jie=-1;
            for(i=0;i<count;i++) {
                if(strcmp(s[i],start)==0)
                    kai=i;
                if(strcmp(s[i],end)==0)
                    jie=i;
            }
    if(kai==-1||jie==-1) {//一定是||刚开始时&&一直错
    printf("-1 ");
    continue;
    }
            dijkstra(kai,jie,count);
            if(dis[jie]<inf)
            printf("%I64d ",dis[jie]);
            else
                printf("-1 ");
        }
        return 0;
    }
  • 相关阅读:
    Objectivec中的@property和@synthesize详解
    objectc笔记
    iOS常用开源框架之ASIHTTPRequest
    oschina引用库说明
    UITableView的重用机制
    iOS常用开源框架之AFNetworking
    ObjectiveC中@class和#import的区别
    Python中文文档 目录(转载)
    关于Console 2窗口内容偏移以及中文输入的问题
    Python 中除法运算需要注意的几点
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410948.html
Copyright © 2020-2023  润新知