最短路径 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 }