poj 1125 Stockbroker Grapevine

poj 1125 Stockbroker Grapevine

最短路径 floyd

http://acm.pku.edu.cn/JudgeOnline/problem?id=1125


题目的意思比较难懂。。。我还是别人看明白了来问我,我才知道题意的,要不然我也看不明白,英语不好。

就是股票经纪人,u, v  两个点, 然后意思是传播谣言需要的时间,所以是每对点的最短路径。

从中选出最快完成的,也就是求出图中每个点到图中其余点的最短路径的最大值,取最小



 1  #include  < stdio.h >
 2  #include  < string .h >
 3  #define  max 102
 4  int  main(){
 5       int  i, j, t, u, v, w, k, m, n, D[max][max], v2, p, ok;
 6       while (scanf( " %d " & m), m){
 7          ok  =   0 ;
 8           for (i  =   0 ; i  <  max; i ++ )
 9               for (j  =   0 ; j  <  max; j ++ )
10                  D[i][j]  =  max;
11           for (u  =   1 ; u  <=  m; u ++ ){
12              scanf( " %d " & t);
13               for (i  =   1 ; i  <=  t; i ++ ){
14                  scanf( " %d%d " & v,  & w);
15                  D[u][v]  =  w;
16              }
17          }
18           for (k  =   1 ; k  <=  m; k ++ )
19               for (i  =   1 ; i  <=  m; i ++ )
20                   for (j  =   1 ; j  <=  m; j ++ )
21                       if (D[i][k]  +  D[k][j]  <  D[i][j]  &&  i  !=  j)
22                          D[i][j]  =  D[i][k]  +  D[k][j];
23          v2  =  max;
24           for (i  =   1 ; i  <=  m; i ++ ){
25              v  =   0 ;
26               for (j  =   1 ; j  <=  m; j ++ )
27                   if (i  !=  j  &&  D[i][j]  >  v)v  =  D[i][j];
28               if (v  !=  max){
29                  ok  =   1 ;
30                   if (v  <  v2){
31                      v2  =  v;
32                      p  =  i;
33                  }
34              }
35          }
36          printf( " %d %d\n " , p, v2);
37      }
38       return   0 ;
39  }

你可能感兴趣的:(poj 1125 Stockbroker Grapevine)