hdu 1599
http://acm.hdu.edu.cn/showproblem.php?pid=1599
很有意思的floyd;
#include<stdio.h> #include<string.h> const int N = 105; const int inf = 0xffffff; int as[N][N],bs[N][N],ans; void floyd(int n) { int k,i,j; for(k = 1; k <= n; ++ k){ for(i = 1; i <= k; ++ i) for(j = 1; j < i; ++ j) if(ans>as[i][j]+bs[i][k]+bs[k][j]) ans = as[i][j] + bs[i][k] + bs[k][j]; for(i = 1; i <= n; ++ i) for(j = 1; j <= n; ++ j) if(as[i][j] > as[i][k] + as[k][j]) as[i][j] = as[i][k] + as[k][j]; } } int main() { int i,j,k,t,n,m; while(scanf("%d %d",&n,&m)==2) { for(i = 0; i < N; ++ i) for(j = 0; j < N; ++ j) as[i][j] = bs[i][j] = inf; int a,b,c; while(m--){ scanf("%d %d %d",&a,&b,&c); if(as[a][b]>c) as[a][b] = bs[a][b] = as[b][a] = bs[b][a] = c; } ans = inf; floyd(n); if(ans!=inf) printf("%d\n",ans); else puts("It's impossible."); }return 0; }