【解题报告】【HDOJ1874】【Floyd最短路】畅通工程续

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

注意重边和环:

1.重边在读取的时候用min选取最小的

2.环则在输出时进行判断

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define INF 0x3f3f3f3f
 4 #define min(a,b) (a>b?b:a)
 5 long int map[201][201];
 6 int main()
 7 {
 8     
 9     long int n,m,a,b,i,j,k,c; 
10     //freopen("1.txt","r",stdin);
11     while(scanf("%ld%ld",&n,&m)!=EOF)
12     {
13         
14         //初始化
15         memset(map,INF,sizeof(map));  
16         for(i=0;i<m;i++)//读取
17         {
18             
19             scanf("%ld%ld",&a,&b);
20             scanf("%ld",&c);
21             map[a][b]=min(map[a][b],c);
22             map[b][a]=map[a][b];
23         }
24         
25         for(k=0;k<n;k++)
26         {
27             for(i=0;i<n;i++)
28                 for(j=0;j<n;j++)
29                     map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
30         }
31         scanf("%ld%ld",&i,&j); 
32         if(i==j) printf("0\n");
33         else
34         {
35             if(map[i][j]<INF)
36                 printf("%ld\n",map[i][j]);
37             else printf("-1\n");
38         }
39     }
40     return 0;
41 }

 

 

posted on 2012-07-21 18:21  coding封神  阅读(121)  评论(0编辑  收藏  举报

导航