题意表示看不懂,英语太差。。。 看了别人的题意,大意是在一群人中散布传言,要求时间最短。
先输入消息传递的人数n, 接下来n行, 每行第一个数m,然后m组关系(编号和时间)。
flody 算法。
代码如下:
1 #include<iostream> 2 #include<cstring> 3 #define MAX 9999999 4 5 using namespace std; 6 7 int map[102][102]; 8 9 void floyd(int n) 10 { 11 int i, j, k; 12 for (k=1; k<=n; k++) 13 for (i=1; i<=n; i++) 14 for (j=1; j<=n; j++) 15 if (map[i][j] > map[i][k]+map[k][j]) 16 map[i][j]=map[i][k]+map[k][j]; 17 } 18 19 int main() 20 { 21 int n, m, i, j; 22 int time, no; 23 while(cin >> n, n) 24 { 25 for (i=1; i<=n; i++) 26 for (j=1; j<=n; j++) 27 if (i != j) map[i][j]=MAX; 28 else map[i][j]=0; 29 for (i=1; i<=n; i++) 30 { 31 cin >> m; 32 while(m--) 33 { 34 cin >> no >> time; 35 map[i][no]=time; 36 } 37 } 38 floyd(n); 39 int t=MAX; 40 int pos; 41 int max; 42 for (i=1; i<=n; i++) 43 { 44 max=0; 45 for (j=1; j<=n; j++) 46 { 47 if (map[i][j] > max) 48 { 49 max=map[i][j]; 50 } 51 } 52 if (max < t) 53 { 54 t=max; 55 pos=i; 56 } 57 } 58 if (t < MAX) 59 cout << pos << " " << t << endl; 60 else 61 cout << "disjoint" << endl; 62 } 63 return 0; 64 }