题目链接:http://poj.org/problem?id=1125
题意:应用Floyd求每对顶点间的最短距离,简单题
1 # include <stdio.h> 2 # define INF 10000 3 int map[110][110], dist[110][110]; 4 int n; 5 void init() 6 { 7 for(int i=1; i<=n; i++) 8 { 9 for(int j=1; j<=n; j++) 10 { 11 if(i == j) map[i][j]=0; 12 else map[i][j] = INF; 13 } 14 } 15 } 16 int main() 17 { 18 int m, i, j , k; 19 while(scanf("%d", &n), n) 20 { 21 init(); 22 for(i=1; i<=n; i++) 23 { 24 scanf("%d",&m); 25 for(j=0; j<m; j++) 26 { 27 int a, b; 28 scanf("%d %d",&a, &b); 29 map[i][a]=b; 30 } 31 } 32 for(k=1; k<=n; k++) 33 { 34 for(i=1; i<=n; i++) 35 { 36 for(j=1; j<=n; j++) 37 { 38 if(map[i][k] != INF && map[k][j] != INF && map[i][k]+map[k][j]<map[i][j]) 39 { 40 map[i][j]=map[i][k]+map[k][j]; 41 } 42 } 43 } 44 } 45 int max; 46 int min=INF, ii, w; 47 48 for(i=1; i<=n; i++) 49 { 50 max=0; 51 for(j=1; j<=n; j++) 52 { 53 //printf("%d ",map[i][j]); 54 if(map[i][j] > max) 55 { 56 57 max = map[i][j]; 58 } 59 } 60 if(min > max) 61 { 62 ii=i; 63 min=max; 64 } 65 //printf(" "); 66 } 67 if(min != INF) printf("%d %d ",ii, min); 68 else printf("disjoint "); 69 } 70 71 return 0; 72 }