http://poj.org/problem?id=1122

题意:
给出地图并且给出终点和多个起点,输出从各个起点到终点的路径和时间。

思路:

因为有多个起点,所以这里反向建图,这样就相当于把终点变成了起点,然后跑一遍最短路即可。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<sstream>
  6. #include<vector>
  7. #include<stack>
  8. #include<queue>
  9. #include<cmath>
  10. #include<map>
  11. #include<set>
  12. using namespace std;
  13. typedef long long ll;
  14. typedef long long ull;
  15. typedef pair<int,int> pll;
  16. const int INF = 0x3f3f3f3f;
  17. const int maxn = + ;
  18.  
  19. int n;
  20. int mp[][];
  21.  
  22. int vis[];
  23. int d[],path[];
  24. int src, dst[];
  25.  
  26. struct node
  27. {
  28. int dst;
  29. int time;
  30. }tar[];
  31.  
  32. bool cmp(node a,node b)
  33. {
  34. return a.time<b.time;
  35. }
  36.  
  37. void dijkstra(int src)
  38. {
  39. memset(vis,,sizeof(vis));
  40. d[src]=;
  41.  
  42. for(int i=;i<=n;i++)
  43. {
  44. int MIN=INF;
  45. int pos;
  46. for(int j=;j<=n;j++)
  47. {
  48. if(!vis[j] && d[j]<MIN)
  49. {
  50. MIN=d[j];
  51. pos=j;
  52. }
  53. }
  54.  
  55. if(MIN==INF) break;
  56. vis[pos]=;
  57.  
  58. for(int j=;j<=n;j++)
  59. {
  60. if(!vis[j] && mp[pos][j]+d[pos]<d[j])
  61. {
  62. d[j]=mp[pos][j]+d[pos];
  63. path[j]=pos;
  64. }
  65. }
  66. }
  67. }
  68.  
  69. void print_path(int i)
  70. {
  71. if(i==-) return;
  72. printf("\t%d",i);
  73. print_path(path[i]);
  74. }
  75.  
  76. int main()
  77. {
  78. //freopen("in.txt","r",stdin);
  79. while(~scanf("%d",&n))
  80. {
  81. memset(path,-,sizeof(path));
  82. memset(d,INF,sizeof(d));
  83.  
  84. for(int i=;i<=n;i++)
  85. for(int j=;j<=n;j++)
  86. {
  87. scanf("%d",&mp[j][i]);
  88. if(mp[j][i]==-) mp[j][i]=INF;
  89. }
  90.  
  91. scanf("%d",&src);
  92. int cnt=; char c;
  93. while(scanf("%d%c",&tar[cnt++].dst,&c) && c!='\n');
  94.  
  95. dijkstra(src);
  96. printf("Org""\t""Dest""\t""Time""\t""Path\n");
  97.  
  98. for(int i=;i<cnt;i++)
  99. tar[i].time=d[tar[i].dst];
  100.  
  101. sort(tar,tar+cnt,cmp);
  102. for(int i=;i<cnt;i++)
  103. {
  104. printf("%d\t%d\t%d",tar[i].dst,src,tar[i].time);
  105. print_path(tar[i].dst);
  106. printf("\n");
  107. }
  108. printf("\n");
  109. }
  110. return ;
  111. }

POJ 1122 FDNY to the Rescue!(最短路+路径输出)的更多相关文章

  1. POJ 1122 FDNY to the Rescue! Floyd 打印路径就行了

    题目大意: 纽约消防部门的支援速度是值得纽约人骄傲的一件事.但是他们想要最快的支援速度,帮助他们提升支援速度他们要调度离着火点最近的一个消防站.他们要你写一个程序来维护纽约消防站的光荣传统.软件需要有 ...

  2. POJ 1122.FDNY to the Rescue! Dijkstra

    FDNY to the Rescue! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2808   Accepted: 86 ...

  3. POJ 1122 FDNY to the Rescue!

    给出某些交叉点的距离,-1 表示无法到达. 然后给出火灾发生点  和 附近的消防局位置. 排列消防局 的 时间 与路径. 反向建图,以火灾出发点为起点做一次SPFA. #include<cstd ...

  4. Pots(POJ - 3414)【BFS 寻找最短路+路径输出】

    Pots(POJ - 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B的容器,你对它们有三种操作,一种是装满其中一个瓶子,另一种是把其中一个瓶子的水都倒掉,还有一种就是把其 ...

  5. POJ 3436 ACM Computer Factory(最大流+路径输出)

    http://poj.org/problem?id=3436 题意: 每台计算机包含P个部件,当所有这些部件都准备齐全后,计算机就组装完成了.计算机的生产过程通过N台不同的机器来完成,每台机器用它的性 ...

  6. poj1122 FDNY to the Rescue!(dij+反向建图+输出路径)

    题目链接:poj1122 FDNY to the Rescue! 题意:给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给 ...

  7. POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解

    题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...

  8. POJ 1062 昂贵的聘礼(最短路)题解

    题意:中文题意不解释... 思路:交换物品使得费用最小,很明显的最短路,边的权值就是优惠的价格,可以直接用Dijkstra解决.但是题目中要求最短路路径中任意两个等级不能超过m,我们不能在连最短路的时 ...

  9. [POJ] 1606 Jugs(BFS+路径输出)

    题目地址:http://poj.org/problem?id=1606 广度优先搜索的经典问题,倒水问题.算法不需要多说,直接BFS,路径输出采用递归.最后注意是Special Judge #incl ...

随机推荐

  1. hdu1024 Max Sum Plus Plus[降维优化好题(貌似以后可以不用单调队列了)]

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. kerberos认证协议分析

    Kerberos认证协议分析 Kerberos认证协议流程 如上图: * 第一步:client和认证服务器(AS)通信完成认证过程,如果认证成功AS返回给client一个TGT(用来向TGS获取tic ...

  3. Egret打包App 短暂黑屏解决方案 (Egret4.1.0)

    论坛已经有人解决:http://bbs.egret.com/forum.php?mod=viewthread&tid=30288&highlight=app%2B%E9%BB%91%E ...

  4. 最舒适的路(并查集+枚举)(hdu1598)

    hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768 ...

  5. python 10分钟入门pandas

    本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...

  6. poj2185 Milking Grid【KMP】

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10084   Accepted: 4371 Des ...

  7. 不走标准路的微软:少一个斜杠的URI Path

    今天又被微软不按标准的做法折腾了一下,写篇博文抱怨一下. 我们先来看一下IETF(Internet Engineering Task Force)对URI结构的标准定义(链接): 注意上面的path部 ...

  8. oracle Bug 4287115(ora-12083)

    今天公司开发在删除表时报错ora-12083,很是疑惑,数据字典记录的是表,而删除要用物化视图方式删除,如下: SQL> DROP TABLE CODE_M_AGENCY;DROP TABLE ...

  9. Oracle性能优化之 Oracle里的优化器

    优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...

  10. Android中的Apk的加固(加壳)原理解析和实现(转)

    一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...