Audiophobia UVA - 10048
看了题解写出来的。。。不过也加深了我对Floyd的理解
1 #define INF 1e8 2 #include<cstdio> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 8 int n,m,q,kase,sx,ex; 9 int dp[105][105]; 10 11 void inite(){ 12 for(int i=1;i<=n;i++){ 13 for(int j=1;j<=n;j++){ 14 if(i==j) 15 dp[i][j]=0; 16 else 17 dp[i][j]=INF; 18 } 19 } 20 } 21 22 void input(){ 23 int x,y,most; 24 for(int i=0;i<m;i++){ 25 scanf("%d%d%d",&x,&y,&most); 26 dp[x][y]=most; 27 dp[y][x]=most; 28 } 29 } 30 31 void Floyd(){ 32 for(int k=1;k<=n;k++) 33 for(int i=1;i<=n;i++) 34 for(int j=1;j<=n;j++) 35 if(dp[i][k]!=INF&&dp[k][j]!=INF) dp[i][j]=min(dp[i][j],max(dp[i][k],dp[k][j])); 36 } 37 38 void solve(){ 39 if(kase) cout<<endl; 40 printf("Case #%d\n",++kase); 41 Floyd(); 42 for(int i=1;i<=q;i++){ 43 scanf("%d%d",&sx,&ex); 44 if(dp[sx][ex]==INF) cout<<"no path"<<endl; 45 else cout<<dp[sx][ex]<<endl; 46 } 47 } 48 49 int main() 50 { kase=0; 51 while(~scanf("%d%d%d",&n,&m,&q)){ 52 if(n==0&&m==0&&q==0) break; 53 inite(); 54 input(); 55 solve(); 56 } 57 return 0; 58 }