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 }

 

posted @ 2017-08-12 20:27  天之道,利而不害  阅读(172)  评论(0编辑  收藏  举报