POJ 1122.FDNY to the Rescue!

FDNY to the Rescue!

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 2808   Accepted: 860

Description

The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make their response time even better. To help them with their response time, they want to make sure that the dispatchers know the closest firehouse to any address in the city. You have been hired to write this software and are entrusted with maintaining the proud tradition of FDNY. Conceptually, the software will be given the address of the fire, the locations of the firehouses, street intersections, and the time it takes to cover the distance between each intersection. It will then use this information to calculate how long it takes to reach an address from each firehouse.

Given a specific fire location in the city, the software will calculate the time taken from all the fire stations located in the city to reach the fire location. The list of fire stations will be sorted from shortest time to longest time. The dispatcher can then pick the closest firestation with available firefighters and equipment to dispatch to the fire.

Input

Line 1: 
# of intersections in the city, a single integer (henceforth referred to as N) N<20

Lines 2 to N+1: 
A table (square matrix of integer values separated by one or more spaces) representing the time taken in minutes between every pair of intersections in the city. In the sample input shown below the value "3" on the 1st row and the 2nd column represents the time taken from intersection #1 to reach intersection #2.

Similarly the value "9" on the 4th row and the 2nd column represents the time taken from intersection #4 to reach intersection #2.

A value of -1 for time means that it is not possible to go directly from the origin intersection (row #) to the destination intersection (column #). All other values in the table are non-negative.

Line N+2: 
An integer value n (<= N) indicating the intersection closest to the fire location followed by one or more integer values for the intersections closest to the fire stations (all on one line, separated by one or more spaces) will follow the input matrix.

Notes on input format:

1. The rows and columns are numbered from 1 to N. 
2. All input values are integers 
3. All fire locations are guaranteed reachable from all firehouses. 
4. All distance calculations are made from the intersection closest to each firehouse to the intersection closest to the fire.

Output

Line 1: 
A label line with the headings for each column, exactly as shown in the example.

Line 2 onwards (one line for each fire station): 
A sorted list (based on time) showing the fire station (origin), the destination site, time taken and a complete shortest path of nodes from the originating fire station to the fire location.

Notes on output format: 
1. Columns are tab separated. 
2. If two or more firehouses are tied in time they can be printed in any order. 
3. If more than one path exists that has the same minimal time for a given location & firehouse, either one can be printed on the output. 
4. If the fire location and the fire station locations happen to be the same intersection, the output will indicate that the origin and destination have the same intersection number, the time will be "0" and the nodes in the shortest path will show just one number, the fire location. 
Next is the picture for the sample input data. 

Sample Input

6
0  3  4 -1 -1 -1
-1 0  4  5 -1 -1
2  3  0 -1 -1  2
8  9  5  0  1 -1
7  2  1 -1  0 -1
5 -1  4  5  4  0
2  4  5  6
In the above input the last line indicates that "2" is the location of the fire and "4", "5" and "6" are the intersections where fire stations are located. 

Sample Output

Org	Dest	Time	Path
5	2	2	5	2
4	2	3	4	5	2
6	2	6	6	5	2

题目链接:http://poj.org/problem?id=1122

题意:有n个交叉路口,N×N的矩阵,edge[i][j]表示第i个交叉路口到底j个交叉路口的时间(注意:edge[i][j]不一定等于edge[j][j])输入一个着火点,接着输入消防站。输出消防站到着火点的时间,具体格式看样例。

思路:终点固定,起点不唯一。把图逆向存储,那么起点就固定了,终点就不唯一。输出最短路径,用Dijkstra算法(这题的输入输出格式需要注意一下)

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 10000000
int n,num,fire;
int edge[50][50];
int sign[50],near[50];
int loc[50];
struct node
{
    int t,p,gg;
} ans[50];
int cmp(node a,node b)
{
    return a.t<b.t;
}
void Init()
{
    cin>>n;
    int i,j;
    for(i=1; i<=n; i++)
    {
        ans[i].t=INF;
        ans[i].gg=0;
        sign[i]=0;
    }
    for(j=1; j<=n; j++)
        for(i=1; i<=n; i++)
            scanf("%d",&edge[i][j]);
    scanf("%d",&fire);
}
void Dijkstra(int v)
{
    int i,j;
    ans[v].t=0;
    for(i=0; i<n; i++)
    {
        sign[v]=1;
        int Min=INF,flag;
        for(j=1; j<=n; j++)
        {
            if(edge[v][j]>=0&&ans[v].t+edge[v][j]<ans[j].t)
            {
                ans[j].t=ans[v].t+edge[v][j];
                near[j]=v;
            }
            if(sign[j]==0&&ans[j].t<Min)
            {
                Min=ans[j].t;
                flag=j;
            }
        }
        v=flag;
    }
}
int main()
{
    int i,j;
    Init();
    Dijkstra(fire);
    int pp;
    while(scanf("%d",&pp)!=EOF)
    {
        ans[pp].gg=1;
    }
    for(i=1; i<=n; i++)
        ans[i].p=i;
    sort(ans,ans+n+1,cmp);
    cout<<"Org\tDest\tTime\tPath"<<endl;
    for(i=1; i<=n; i++)
    {
        if(ans[i].gg==1)
        {
            printf("%d\t%d\t%d\t",ans[i].p,fire,ans[i].t);
            int flag=ans[i].p;
            while(flag!=fire)
            {
                cout<<flag<<"\t";
                flag=near[flag];
            }
            cout<<fire<<endl;
        }
    }
    return 0;
}

代码

				
时间: 2024-10-13 16:34:56

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

poj 1122 FDNY to the Rescue! (dijkstra)

FDNY to the Rescue! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2475   Accepted: 755 Description The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make the

POJ 1122 FDNY to the Rescue!(最短路)

题目链接 FDNY to the Rescue! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3405 Accepted: 1063 Description The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make t

POJ 1122 FDNY to the Rescue! 反向dijkstra

链接: 1122 题意: 一个城市中有N个交叉路口,给出从一个交叉路口i到另一个交叉路口j所需要的时间(i,j=1~N,单向)如果edge[i][j]=-1 则表示不通 给出一个火警的位置(终点) 和X个消防站(起点) 输出:每一行描述了一个消防站的信息,这些信息按消防站到达火警位置所需时间从小到大排列.这些信息包括:消防站的位置(初始位置).火警位置(目标位置).所需时间以及最短路径上的每个交叉路口. 题解: 起点有多个,终点只有一个.为了只进行一次dijkstra算法 我们可以考虑从终点出发

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

题目大意: 纽约消防部门的支援速度是值得纽约人骄傲的一件事.但是他们想要最快的支援速度,帮助他们提升支援速度他们要调度离着火点最近的一个消防站.他们要你写一个程序来维护纽约消防站的光荣传统.软件需要有的功能是,能获取着火点的地址 和 消防站的位置, 街道交叉路口, 从一个交叉路口到达另一个交叉路口的时间. 他将要计算从消防站到达着火点需要多少时间. 给你一个具体的着火点的地址,这个软件应该找出所有消防站到达着火点的距离, 并且从小到大进行排序.以便消防员来调度人员到达救火地点. #include

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

题目链接:poj1122 FDNY to the Rescue! 题意:给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给出火警位置所在的交叉路口 和 一个或多个消防站所处的交叉路口位置.输出要求按消防站到火警位置所需时间从小到大排列,输出信息包括消防站位置(初始位置),火警位置(目标位置),所需时间,最短路径上每个交叉路口. 题解:反向建图,从火警位置求一次最短路,求最短路时记录路径,按时间从小到大输出. 1 #in

ZOJ 1053 FDNY to the Rescue!(最短路)

题目链接 FDNY to the Rescue! Time Limit: 2 Seconds Memory Limit: 65536 KB The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make their response time even better. To help them w

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

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

FDNY to the Rescue! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2368   Accepted: 721 Description The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make the

poj图论解题报告索引

最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman-ford,spfa) poj1511 - Invitation Cards(单源来回最短路径,spfa邻接表) poj1797 - Heavy Transportation(最大边,最短路变形,dijkstra,spfa,bellman-ford) poj2240 - Arbitrage(汇率问题,