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!(最短路+路径输出)的更多相关文章

  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. linux下查看服务器软件的编译参数

    1.nginx编译参数: your_nginx_dir/sbin/nginx -V 2.apache编译参数: cat your_apache_dir/build/config.nice 3.php编 ...

  2. #cat ora11g_ora_.trc

    Trace file /u02/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_31212.trc Oracle Database 11g Enterpri ...

  3. goole进不去?

    1.把hosts文件放到C:\Windows\System32\drivers\etc目录下就可以上了.hosts文件自己下载 2. 上vpn ,注册个账号,每个账号500M的FQ流量也可以

  4. JAVA学习基础知识总结(原创)

    (未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...

  5. 使用MySQLMTOP监控MySQL性能(二)

    一.服务器角色 服务器角色 172.18.35.29 10.160.22.14 (MySQL Master) 10.160.22.47 (MySQL Slave) 监控点 YES NO NO 被监控点 ...

  6. Guava增强for循环

    Guava的前身是Google Collections,是Google开发出的一个开源Java常用类库,包含了一些集合的便捷操作API.本文通过一些常用的例子来剖析Guava的奇妙之处. Guava是 ...

  7. 沈阳网络赛G-Spare Tire【容斥】

    17.64% 1000ms 131072K   A sequence of integer \lbrace a_n \rbrace{an​} can be expressed as: \display ...

  8. python linux 自动补全 tab.py

    #!/usr/bin/env python # python startup file import sys import readline import rlcompleter import ate ...

  9. mysql 数据操作 单表查询 where约束 工作模式

    select name,age from employee where id >7; 1.首先先找到表   from employee 2.表存在 mysql拿着约束条件  去表里 看依次匹配数 ...

  10. PAT 1143 Lowest Common Ancestor[难][BST性质]

    1143 Lowest Common Ancestor(30 分) The lowest common ancestor (LCA) of two nodes U and V in a tree is ...