Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
floyd水题,注意不连通时将边设置为INF就行#include<iostream> #include<algorithm> int inf = 300000; using namespace std; int n; int map[105][105]; void floyd() { for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { //cout << i << "--->" << j << " " << map[i][j] << endl; map[i][j] = min(map[i][j], map[i][k] + map[k][j]); //cout << i << "--->" << j << " " << map[i][j] << endl; } } int main() { while (cin >> n, n) { //memset(map, inf, sizeof(map)); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) map[i][j] = (i == j ? 0 : inf); //cout << map[1][2] << endl; for (int i = 1; i <= n; i++) { int num; cin >> num; for (int j = 1; j <= num; j++) { int t; cin >> t; cin >> map[i][t]; } } /* cout << "开始运算前" << endl; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) cout << map[i][j] << " "; cout << endl; }*/ floyd(); int min_time = inf; int mins; int tar; for (int i = 1; i <= n; i++) { int flag = 0; mins = 0; for (int j = 1; j <= n; j++) { if (map[i][j] == inf) { flag = 1; continue; } else if (map[i][j] > mins) mins = map[i][j]; } if (flag) continue; else if (mins < min_time) { min_time = mins; tar = i; } } cout << tar << " " << min_time << endl; } system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator