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

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

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

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

#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
using namespace std;
int n;
struct lx
{
int v,t;
};
vector<lx>g[21];
bool vis[21];
int path[21];
int dis[21];
void SPFA(int start)
{
for(int i=1;i<=n;i++)
dis[i]=INF,vis[i]=0,path[i]=0;
queue<int>q;
vis[start]=1,dis[start]=0;
q.push(start);
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=0;
for(int j=0;j<g[u].size();j++)
{
int v=g[u][j].v;
int t=g[u][j].t;
if(dis[v]>dis[u]+t)
{
dis[v]=dis[u]+t;
path[v]=u;// 记录路径
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
}
struct node
{
int Org,time;
}l[21];
bool cmp(node a,node b)
{
return a.time<b.time;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int t;
scanf("%d",&t);
if(i==j||t==-1)continue;
lx now;
now.v=i,now.t=t;
g[j].push_back(now);
}
}
int start,endcot=0;
int thend[21];
scanf("%d",&start);
getchar();
char str[101];
gets(str);
int i=0;
int c=0;
while(str[i]==' ')i++;
for(i=0;i<=strlen(str);i++)
{
while(str[i]>='0'&&str[i]<='9')c=c*10+str[i]-'0',i++;
if(c!=0)
thend[endcot++]=c,c=0;
}
SPFA(start);
for( i=0;i<endcot;i++)
l[i].Org=thend[i],l[i].time=dis[thend[i]];
sort(l,l+endcot,cmp);
puts("Org Dest Time Path");
for( i=0;i<endcot;i++)
{
int v=l[i].Org;
printf("%d %d %d",v,start,dis[v]);
int tmp=v;
while(path[tmp]!=0)
printf(" %d",tmp),tmp=path[tmp];
printf(" %d\n",start); }
}
}

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. pssh,pscp,pslurp使用实践

    因为常常须要到几十台机器上运行同样的命令,而眼下机器上还没有部署Saltstack或Puppet等集群化管理工具. 因为每台server上都使用同样的公钥,故之前都是写一些脚本:把IP 放到一个文件里 ...

  2. QSettings操作配置文件

    用Qt写界面时,难免会进行本地信息的保存,可以使用轻量级数据库sqlite,也可以使用QSettings读写配置文件.     如何来进行读写呢?如下,使用QSettings写一个通用的读写方法:   ...

  3. 安装Oracle时可能碰到的常见问题-1

    安装Oracle可能有些人觉得是一件非常easy的事情,但事实上是在安装的过程中蕴含着丰富的知识点.尤其安装在Linux平台,可能会碰到这样或那样各种诡异的问题,透过问题看到本质,这才是从深处理解Or ...

  4. 首个spring mvc 测试例子搭建遇到问题记录

    开发环境:jdk1.7 + tomcat7 + Eclipse Juno 首先下载spring 相关jar包 我用的是 spring-framework-3.2.1.RELEASE 下载地址:http ...

  5. POJ 1273 Drainage Ditches(网络流,最大流)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  6. win32创建控件的一些问题

    在我们使用CreateWindow();像一般控件建Windows扩展控件的时候我们会发现控件没有创建成功 这是因为我们没有对Windows扩展控件库进行初始化,这要我们使用InitCommonCon ...

  7. 眼见为实(2):介绍Windows的窗口、消息、子类化和超类化

    眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较“生僻”的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和 ...

  8. matlab画棋盘格程序

    转载请注明出处:zhouyelihua**http://blog.csdn.net/zhouyelihua/article/details/46674191** 意义 在摄像机标定过程中经常须要打印棋 ...

  9. 状态压缩动态规划 -- 棋盘问题 POJ 1321

    一个 N * N 的棋盘上面,有些格子不能放,放置 M 的棋子, 每两个棋子不能在同一行或者同一列,问有多少种放法 DFS太慢,用SCR好点点 Python 仅仅有 22 行,事实上能够更短.可是得排 ...

  10. c++实用技巧

    原地址:http://www.cnblogs.com/easymind223/articles/2576904.html 晚上的时间总是习惯性的在cnblogs逛街,今天又看到了好文章,其c++味道浓 ...