2253 Frogger 解题报告

 

AccecptTime:      2008-12-30 11:11:23

Language:         C++
Memory:           572K
Time:             16MS
Errors:           2WA

Algorithm:        Dijkstra最短路径

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include <algorithm>
  4. #include <math.h>
  5. #include <memory.h>
  6. using namespace std;
  7. #define INFINITY 9999999.9
  8. #define max(x,y) (x) > (y) ? (x):(y);
  9. //记录石头的坐标用
  10. typedef struct Stone {
  11.     int x;
  12.     int y;
  13. }Stone;
  14. Stone stone[201];
  15. double road[201][201];
  16. double d[201];
  17. void ShortestPath_DIJ(int n)
  18. {
  19.     int v;
  20.     bool final[1001];
  21.     for(int i = 1; i <= n; i++) {
  22.         final[i] = false;
  23.         d[i] = road[1][i];
  24.     }
  25.     d[1] = 0; 
  26.     final[1] = true;
  27.     double min;
  28.     for(int i = 1; i <= n; i++) {
  29.         min = INFINITY;
  30.         for(int w = 1; w <= n; w ++)
  31.             if(!final[w] && d[w]  < min ) {
  32.                     v = w;
  33.                     min = d[w];
  34.                 }
  35.         final[v] = true;
  36.         for(int w = 1; w <= n; w++)
  37.              if(!final[w] && ( min < d[w] && road[v][w] < d[w]))
  38.                     d[w] =max( road[v][w] , min);
  39.     }
  40. }
  41. int main()
  42. {
  43.     int n,time = 1;
  44.     while(cin >> n && n) {
  45.         cin >> stone[1].x >> stone[1].y;
  46.         cin >> stone[n].x >> stone[n].y;
  47.         for(int i = 2; i < n; i++) 
  48.             cin >> stone[i].x >> stone[i].y;
  49.         for(int i = 1; i <= n; i++)
  50.             for(int j = 1; j <= n; j++)
  51.                 if( i == j)
  52.                     road[i][j] = INFINITY;
  53.                 else
  54.                     road[i][j] = road[j][i] = sqrt(1.0*(stone[i].x - stone[j].x)*(stone[i].x - stone[j].x) + 1.0*(stone[i].y - stone[j].y) * (stone[i].y - stone[j].y));
  55.         ShortestPath_DIJ(n);
  56.         printf("Scenario #%d/nFrog Distance = %.3f/n/n",time++,d[n]);
  57.     }
  58. }

没啥好说的,这是1797的镜像,把min和max换一下就差不多了,主要是copy的时候居然把final[w]弄成final,贡献了2wa.据说可以用Kruskal,Prim来做.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值