1797 Heavy Transportation 解题报告

AccecptTime:  2008-12-30 10:07:12

Language:     C++
Memory:       4184K
Time:         1641MS

Errors:       3PE + 4WA + 1TL + 1ML + 2RE

Algorithm:    Dijkstra

  1. #include 
  2. #include 
  3. #include 
  4. #include 
  5. #include 
  6. using namespace std;
  7. unsigned int road[1001][1001];
  8. //用于记录从v0到各点的最短路径
  9. unsigned int d[1001];
  10. #define min(x,y) (x) > (y) ? (y):(x);
  11. void ShortestPath_DIJ(int n)
  12. {
  13.     int v;
  14.     //final[v]为true,当且仅当已经求得v0到v的最短路径
  15.     bool final[1001];
  16.     for(int i = 1; i <= n; i++) {
  17.         final[i] = false;
  18.         d[i] = road[1][i];
  19.     }
  20.     d[1] = 0; 
  21.     final[1] = true;
  22.     unsigned int max;
  23.     for(int i = 1; i <= n; i++) {
  24.         max = 0;
  25.         for(int w = 1; w <= n; w ++)
  26.             //这里略有不同,题目求的是最大承载重量
  27.             if(!final[w] && d[w]  > max ) {
  28.                     v = w;
  29.                     max = d[w];
  30.                 }
  31.         final[v] = true;
  32.         for(int w = 1; w <= n; w++)
  33.             // if(!final && ( max + road[v][w] < d[w])
  34.             //      d[w] = road[v][w] + max;
  35.             if(!final[w] && ( d[w] < max && d[w] < road[v][w] )) 
  36.                 d[w] = min(road[v][w] , max);
  37.     }
  38. }
  39. int main()
  40. {
  41.     
  42.     int n, m;
  43.     int x,y,time;
  44.     cin >> time;
  45.     for(int count = 1; count <= time; count++) {
  46.         scanf("%d%d",&n,&m);
  47.         memset(road,0,1001 * 1001 * sizeof(int));
  48.             for(int j = 1;  j <= m; j++) {
  49.                 cin >> x >> y;
  50.                 // !!!!!  这道题是无向图   !!!!!!
  51.                 cin >> road[x][y];
  52.                  road[y][x] = road[x][y];
  53.             }
  54.         ShortestPath_DIJ(n);
  55.         printf("Scenario #%d:/n%d/n/n",count,d[n]);
  56.     }
  57. }
一大早起来就用一个小时把这道入门题给ac了,憋了一个晚上了啊...这道题主要考察的是Dijkstra的最短路径,一开始以为是Floyd,结果1tl,1ml,另外由于数组开小了直接贡献2re,在4次wa后我顿悟,这个Dijkstra好像是无向图,结果在3次由于少了一个"/n"的pe后,ac了。今天算是开始入门最短路径了。这段代码以后要多看来减少犯错~另,觉得这段代码的效率太低了,大牛们都是x00ms的,以后要多留意了~~

ps:早餐没吃,下午还要考数据结构,好像有点不务正业了...刚才写了同一篇解题报告,csdn直接把它给和谐了...囧,这不是明摆着欺负人没吃饭么???

你可能感兴趣的:(最短路径,解题报告,算法)