AccecptTime: 2008-12-30 10:07:12
Memory: 4184K
Time: 1641MS
Errors: 3PE + 4WA + 1TL + 1ML + 2RE
Algorithm: Dijkstra
- #include <stdio.h>
- #include <memory.h>
- #include <algorithm>
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- unsigned int road[1001][1001];
- //用于记录从v0到各点的最短路径
- unsigned int d[1001];
- #define min(x,y) (x) > (y) ? (y):(x);
- void ShortestPath_DIJ(int n)
- {
- int v;
- //final[v]为true,当且仅当已经求得v0到v的最短路径
- bool final[1001];
- for(int i = 1; i <= n; i++) {
- final[i] = false;
- d[i] = road[1][i];
- }
- d[1] = 0;
- final[1] = true;
- unsigned int max;
- for(int i = 1; i <= n; i++) {
- max = 0;
- for(int w = 1; w <= n; w ++)
- //这里略有不同,题目求的是最大承载重量
- if(!final[w] && d[w] > max ) {
- v = w;
- max = d[w];
- }
- final[v] = true;
- for(int w = 1; w <= n; w++)
- // if(!final && ( max + road[v][w] < d[w])
- // d[w] = road[v][w] + max;
- if(!final[w] && ( d[w] < max && d[w] < road[v][w] ))
- d[w] = min(road[v][w] , max);
- }
- }
- int main()
- {
- int n, m;
- int x,y,time;
- cin >> time;
- for(int count = 1; count <= time; count++) {
- scanf("%d%d",&n,&m);
- memset(road,0,1001 * 1001 * sizeof(int));
- for(int j = 1; j <= m; j++) {
- cin >> x >> y;
- // !!!!! 这道题是无向图 !!!!!!
- cin >> road[x][y];
- road[y][x] = road[x][y];
- }
- ShortestPath_DIJ(n);
- printf("Scenario #%d:/n%d/n/n",count,d[n]);
- }
- }
ps:早餐没吃,下午还要考数据结构,好像有点不务正业了...刚才写了同一篇解题报告,csdn直接把它给和谐了...囧,这不是明摆着欺负人没吃饭么???