【解题报告】【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 }