http://acm.hdu.edu.cn/showproblem.php?pid=2544
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 dis[maxn]; 10 int n,m,a,b,c; 11 12 void inti() 13 { 14 for(int i=1; i<=n; i++) 15 { 16 for(int j=1; j<=n; j++) 17 { 18 if(i==j) g[i][j]=0; 19 else g[i][j]=inf; 20 } 21 } 22 } 23 int main() 24 { 25 while(scanf("%d%d",&n,&m)!=EOF){ 26 if(n==0&&m==0) break; 27 inti(); 28 for(int i=0; i<m; i++) 29 { 30 scanf("%d%d%d",&a,&b,&c); 31 g[a][b]=g[b][a]=min(g[a][b],c); 32 } 33 for(int k=1; k<=n; k++) 34 { 35 for(int i=1; i<=n; i++) 36 { 37 if(g[i][k]==inf) continue; 38 for(int j=1; j<=n; j++) 39 { 40 g[i][j]=min(g[i][j],g[i][k]+g[k][j]); 41 } 42 } 43 } 44 printf("%d ",g[1][n]); 45 } 46 return 0; 47 }