POJ 1122 FDNY to the Rescue!(最短路+路径输出)
http://poj.org/problem?id=1122
题意:
给出地图并且给出终点和多个起点,输出从各个起点到终点的路径和时间。
思路:
因为有多个起点,所以这里反向建图,这样就相当于把终点变成了起点,然后跑一遍最短路即可。
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cstdio>
- #include<sstream>
- #include<vector>
- #include<stack>
- #include<queue>
- #include<cmath>
- #include<map>
- #include<set>
- using namespace std;
- typedef long long ll;
- typedef long long ull;
- typedef pair<int,int> pll;
- const int INF = 0x3f3f3f3f;
- const int maxn = + ;
- int n;
- int mp[][];
- int vis[];
- int d[],path[];
- int src, dst[];
- struct node
- {
- int dst;
- int time;
- }tar[];
- bool cmp(node a,node b)
- {
- return a.time<b.time;
- }
- void dijkstra(int src)
- {
- memset(vis,,sizeof(vis));
- d[src]=;
- for(int i=;i<=n;i++)
- {
- int MIN=INF;
- int pos;
- for(int j=;j<=n;j++)
- {
- if(!vis[j] && d[j]<MIN)
- {
- MIN=d[j];
- pos=j;
- }
- }
- if(MIN==INF) break;
- vis[pos]=;
- for(int j=;j<=n;j++)
- {
- if(!vis[j] && mp[pos][j]+d[pos]<d[j])
- {
- d[j]=mp[pos][j]+d[pos];
- path[j]=pos;
- }
- }
- }
- }
- void print_path(int i)
- {
- if(i==-) return;
- printf("\t%d",i);
- print_path(path[i]);
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- while(~scanf("%d",&n))
- {
- memset(path,-,sizeof(path));
- memset(d,INF,sizeof(d));
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- {
- scanf("%d",&mp[j][i]);
- if(mp[j][i]==-) mp[j][i]=INF;
- }
- scanf("%d",&src);
- int cnt=; char c;
- while(scanf("%d%c",&tar[cnt++].dst,&c) && c!='\n');
- dijkstra(src);
- printf("Org""\t""Dest""\t""Time""\t""Path\n");
- for(int i=;i<cnt;i++)
- tar[i].time=d[tar[i].dst];
- sort(tar,tar+cnt,cmp);
- for(int i=;i<cnt;i++)
- {
- printf("%d\t%d\t%d",tar[i].dst,src,tar[i].time);
- print_path(tar[i].dst);
- printf("\n");
- }
- printf("\n");
- }
- return ;
- }
POJ 1122 FDNY to the Rescue!(最短路+路径输出)的更多相关文章
- POJ 1122 FDNY to the Rescue! Floyd 打印路径就行了
题目大意: 纽约消防部门的支援速度是值得纽约人骄傲的一件事.但是他们想要最快的支援速度,帮助他们提升支援速度他们要调度离着火点最近的一个消防站.他们要你写一个程序来维护纽约消防站的光荣传统.软件需要有 ...
- POJ 1122.FDNY to the Rescue! Dijkstra
FDNY to the Rescue! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2808 Accepted: 86 ...
- POJ 1122 FDNY to the Rescue!
给出某些交叉点的距离,-1 表示无法到达. 然后给出火灾发生点 和 附近的消防局位置. 排列消防局 的 时间 与路径. 反向建图,以火灾出发点为起点做一次SPFA. #include<cstd ...
- Pots(POJ - 3414)【BFS 寻找最短路+路径输出】
Pots(POJ - 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B的容器,你对它们有三种操作,一种是装满其中一个瓶子,另一种是把其中一个瓶子的水都倒掉,还有一种就是把其 ...
- POJ 3436 ACM Computer Factory(最大流+路径输出)
http://poj.org/problem?id=3436 题意: 每台计算机包含P个部件,当所有这些部件都准备齐全后,计算机就组装完成了.计算机的生产过程通过N台不同的机器来完成,每台机器用它的性 ...
- poj1122 FDNY to the Rescue!(dij+反向建图+输出路径)
题目链接:poj1122 FDNY to the Rescue! 题意:给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给 ...
- POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...
- POJ 1062 昂贵的聘礼(最短路)题解
题意:中文题意不解释... 思路:交换物品使得费用最小,很明显的最短路,边的权值就是优惠的价格,可以直接用Dijkstra解决.但是题目中要求最短路路径中任意两个等级不能超过m,我们不能在连最短路的时 ...
- [POJ] 1606 Jugs(BFS+路径输出)
题目地址:http://poj.org/problem?id=1606 广度优先搜索的经典问题,倒水问题.算法不需要多说,直接BFS,路径输出采用递归.最后注意是Special Judge #incl ...
随机推荐
- hdu1024 Max Sum Plus Plus[降维优化好题(貌似以后可以不用单调队列了)]
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- kerberos认证协议分析
Kerberos认证协议分析 Kerberos认证协议流程 如上图: * 第一步:client和认证服务器(AS)通信完成认证过程,如果认证成功AS返回给client一个TGT(用来向TGS获取tic ...
- Egret打包App 短暂黑屏解决方案 (Egret4.1.0)
论坛已经有人解决:http://bbs.egret.com/forum.php?mod=viewthread&tid=30288&highlight=app%2B%E9%BB%91%E ...
- 最舒适的路(并查集+枚举)(hdu1598)
hdu1598 find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768 ...
- python 10分钟入门pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- poj2185 Milking Grid【KMP】
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 10084 Accepted: 4371 Des ...
- 不走标准路的微软:少一个斜杠的URI Path
今天又被微软不按标准的做法折腾了一下,写篇博文抱怨一下. 我们先来看一下IETF(Internet Engineering Task Force)对URI结构的标准定义(链接): 注意上面的path部 ...
- oracle Bug 4287115(ora-12083)
今天公司开发在删除表时报错ora-12083,很是疑惑,数据字典记录的是表,而删除要用物化视图方式删除,如下: SQL> DROP TABLE CODE_M_AGENCY;DROP TABLE ...
- Oracle性能优化之 Oracle里的优化器
优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...
- Android中的Apk的加固(加壳)原理解析和实现(转)
一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...