给出某些交叉点的距离,-1 表示无法到达。

然后给出火灾发生点  和 附近的消防局位置。

排列消防局 的 时间 与路径。

反向建图,以火灾出发点为起点做一次SPFA。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<string>
  4. #include<queue>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<map>
  8. #include<stack>
  9. #include<iostream>
  10. #include<list>
  11. #include<set>
  12. #include<cmath>
  13. #define INF 0x7fffffff
  14. #define eps 1e-6
  15. using namespace std;
  16. int n;
  17. struct lx
  18. {
  19. int v,t;
  20. };
  21. vector<lx>g[21];
  22. bool vis[21];
  23. int path[21];
  24. int dis[21];
  25. void SPFA(int start)
  26. {
  27. for(int i=1;i<=n;i++)
  28. dis[i]=INF,vis[i]=0,path[i]=0;
  29. queue<int>q;
  30. vis[start]=1,dis[start]=0;
  31. q.push(start);
  32. while(!q.empty())
  33. {
  34. int u=q.front();q.pop();
  35. vis[u]=0;
  36. for(int j=0;j<g[u].size();j++)
  37. {
  38. int v=g[u][j].v;
  39. int t=g[u][j].t;
  40. if(dis[v]>dis[u]+t)
  41. {
  42. dis[v]=dis[u]+t;
  43. path[v]=u;// 记录路径
  44. if(!vis[v])
  45. {
  46. vis[v]=1;
  47. q.push(v);
  48. }
  49. }
  50. }
  51. }
  52. }
  53. struct node
  54. {
  55. int Org,time;
  56. }l[21];
  57. bool cmp(node a,node b)
  58. {
  59. return a.time<b.time;
  60. }
  61. int main()
  62. {
  63. while(scanf("%d",&n)!=EOF)
  64. {
  65. for(int i=1;i<=n;i++)
  66. {
  67. for(int j=1;j<=n;j++)
  68. {
  69. int t;
  70. scanf("%d",&t);
  71. if(i==j||t==-1)continue;
  72. lx now;
  73. now.v=i,now.t=t;
  74. g[j].push_back(now);
  75. }
  76. }
  77. int start,endcot=0;
  78. int thend[21];
  79. scanf("%d",&start);
  80. getchar();
  81. char str[101];
  82. gets(str);
  83. int i=0;
  84. int c=0;
  85. while(str[i]==' ')i++;
  86. for(i=0;i<=strlen(str);i++)
  87. {
  88. while(str[i]>='0'&&str[i]<='9')c=c*10+str[i]-'0',i++;
  89. if(c!=0)
  90. thend[endcot++]=c,c=0;
  91. }
  92. SPFA(start);
  93. for( i=0;i<endcot;i++)
  94. l[i].Org=thend[i],l[i].time=dis[thend[i]];
  95. sort(l,l+endcot,cmp);
  96. puts("Org Dest Time Path");
  97. for( i=0;i<endcot;i++)
  98. {
  99. int v=l[i].Org;
  100. printf("%d %d %d",v,start,dis[v]);
  101. int tmp=v;
  102. while(path[tmp]!=0)
  103. printf(" %d",tmp),tmp=path[tmp];
  104. printf(" %d\n",start);
  105.  
  106. }
  107. }
  108. }

POJ 1122 FDNY to the Rescue!的更多相关文章

  1. POJ 1122.FDNY to the Rescue! Dijkstra

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

  2. POJ 1122 FDNY to the Rescue!(最短路+路径输出)

    http://poj.org/problem?id=1122 题意:给出地图并且给出终点和多个起点,输出从各个起点到终点的路径和时间. 思路: 因为有多个起点,所以这里反向建图,这样就相当于把终点变成 ...

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

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

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

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

  5. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  6. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  7. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  8. POJ1122_FDNY to the Rescue!(逆向建图+最短路树)

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

  9. poj图论解题报告索引

    最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...

随机推荐

  1. 动态绑定Gridview带模板列

    公司要做一个可以支持4种数据库(<!--数据库类型 (DLL专用) (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)-->)的并且字段随表字段变化的可 ...

  2. uva 620 Cellular Structure

    题目连接:620 - Cellular Structure 题目大意:给出一个细胞群, 判断该细胞的可能是由哪一种生长方式的到的, 输出该生长方式的最后一种生长种类, "SIMPLE&quo ...

  3. Swift - String与NSString的区别,以及各自的使用场景

    String是Swift里新增加的类型,它与原来的NSString可以很方便地互相转换.但在实际开发中,我们该如何选择? 1,能使用String类型就尽量使用String类型,原因如下: (1)现在C ...

  4. Swift - 制作一个录音机(声音的录制与播放)

    1,技术介绍 (1)AVFoundation.framework框架提供了AVAudioRecorder类.它可以实现录音功能. (2)而使用该框架的AVAudioPlayer类,可以实现声音的播放. ...

  5. iOS开发- 查询项目代码行数

    ...事实上, 这功能也没什么用. 就是查询一个项目总的代码行数. 玩玩倒是能够. 方法: 在终端以下依次输入: cd 项目文件 find . "(" -name "*. ...

  6. EasyUI - NumberBox组件

    效果: html代码: <input type ="text" id ="box"/> JS代码: $(function () { $('#box' ...

  7. ASP.NET - 缓存(Cache)

    页面缓存: 给页面添加<%@ OutPutCache Duration = “15” VaryByParam = “none” %> 这样就可以启用页面缓存了,那么在规定的时间内,页面之访 ...

  8. JavaScript 进阶(四)解密闭包closure

    闭包(closure)是什么东西 我面试前端基本都会问一个问题"请描述一下闭包".相当多的应聘者的反应都是断断续续的词,“子函数”“父函数”“变量”,支支吾吾的说不清楚.我提示说如 ...

  9. [置顶] C++之TinyXML的使用介绍

    一.引子: 最近在做GBT28181国标平台对接的工作,涉及到一些进程间消息通讯,消息体有xml格式,之前测试的时候都是拿他们当做字符串去解析,现在正儿八经地开发的时候,就想到了用xml库去解析,由于 ...

  10. hibernate简单介绍

    1.   Hibernate是什么? hibernate是 轻量级的 ORM 框架. ORM全称object/relationmapping [对象/关系映射]. Hibernate主要用来实现Jav ...