http://acm.hdu.edu.cn/showproblem.php?pid=1874
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 500 5 using namespace std; 6 const int inf=1<<28; 7 8 int g[maxn][maxn]; 9 int n,m,a,b,c,s,e; 10 11 void inti() 12 { 13 for(int i=0; i<n; i++) 14 { 15 for(int j=0; j<n; j++) 16 { 17 if(i==j) g[i][j]=0; 18 else g[i][j]=inf; 19 } 20 } 21 } 22 int main() 23 { 24 while(scanf("%d%d",&n,&m)!=EOF) 25 { 26 inti(); 27 for(int i=0; i<m; i++) 28 { 29 scanf("%d%d%d",&a,&b,&c); 30 g[a][b]=g[b][a]=min(g[a][b],c); 31 } 32 for(int k=0; k<n; k++) 33 { 34 for(int i=0; i<n; i++) 35 { 36 if(g[i][k]==inf) continue; 37 for(int j=0; j<n; j++) 38 { 39 g[i][j]=min(g[i][j],g[i][k]+g[k][j]); 40 } 41 } 42 } 43 scanf("%d%d",&s,&e); 44 if(g[s][e]==inf) printf("-1 "); 45 else printf("%d ",g[s][e]); 46 } 47 return 0; 48 }