首页 > 其他 > 详细

Floyd最短路径

时间:2014-03-19 19:37:49      阅读:273      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=2112

bubuko.com,布布扣
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #define maxn 155
 5 #define INF 0xffffff
 6 using namespace std;
 7 int map[maxn][maxn];
 8 char s1[10005][40],s2[10005][40],s[10005][40];
 9 int t[10005];
10 int n,cnt=0;
11 int  solve(char *p)
12 {
13     for(int i=1;i<=cnt;i++)
14         if(strcmp(s[i],p)==0)
15         return i;
16     strcpy(s[++cnt],p);
17         return cnt;
18 }
19 int main()
20 {
21     //freopen("in.txt","r",stdin);
22     char start[40],end[40];
23     while(scanf("%d",&n)!=EOF)
24     {
25         if(n==-1)  break;
26         cnt=0;
27         scanf("%s%s",start,end);
28         for(int i=1;i<=n;i++)
29             scanf("%s%s%d",s1[i],s2[i],&t[i]);
30         for(int i=1;i<maxn;i++)
31         {
32             map[i][i]=0;
33             for(int j=1;j<maxn;j++)
34                 map[i][j]=INF;
35         }
36         if(!strcmp(start,end))
37         {
38             printf("0\n");
39             continue;
40         }
41 
42         for(int i=1;i<=n;i++)
43         {
44             int x=solve(s1[i]);
45             int y=solve(s2[i]);
46             map[x][y]=map[y][x]=t[i];
47         }
48         int s=solve(start);
49         int e=solve(end);
50         for(int i=1;i<=cnt;i++)
51             for(int j=1;j<=cnt;j++)
52             for(int k=1;k<=cnt;k++)
53             map[j][k]=min(map[j][i]+map[i][k],map[j][k]);
54         if(map[s][e]==INF)
55             printf("-1\n");
56         else
57             printf("%d\n",map[s][e]);
58     }
59     return 0;
60 }
bubuko.com,布布扣

Floyd最短路径,布布扣,bubuko.com

Floyd最短路径

原文:http://www.cnblogs.com/lyf123456/p/3611237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!