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 |
麻烦大牛们 帮菜鸟看一下好吗?#include <stdio.h> #include <memory.h> #define MAXN 1000 int used[MAXN + 10], map[MAXN + 10][MAXN + 10], L[MAXN + 10], result[MAXN + 10]; int n, m, x; void res() { int i, j, t, used[MAXN + 10][MAXN + 10]; memset (used, 0, sizeof(used)); for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if(!used[i][j]) { t = map[i][j]; map[i][j] = map[j][i]; map[j][i] = t; used[i][j] = used[j][i] = 1; } } void Dijkstra() { int i, j, min, minj; memset (used, 0, sizeof(used)); memset (L, 110, sizeof(L)); L[x] = 0; for (i = 1; i <= n; i++) { if(i == x) continue; min = 110; for (j = 1; j <= n; j++) if(L[j] < min&&!used[j]) { min = L[j]; minj = j; } used[minj] = 1; for (j = 1; j <= n; j++) if(!used[j]&&L[minj] + map[minj][j] < L[j]) L[j] = map[minj][j] + L[minj]; } for (i = 1; i <= n; i++) result[i] += L[i]; } int main() { int i, j, begin, end, t, max; memset (map, 110, sizeof(map)); memset (result, 0, sizeof(result)); scanf ("%d%d%d", &n, &m, &x); for (i = 1; i <= m; i++) { scanf ("%d%d%d", &begin, &end, &t); map[begin][end] = t; } Dijkstra(); res(); Dijkstra(); max = 0; for (i = 1; i <= n; i++) if(max < result[i]) max = result[i]; printf ("%d\n", max); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator