poj 1122 FDNY to the Rescue!

原创 2013年12月05日 14:10:05

关键是建图,zoj也有一题,不过格式要求不一样,数据好像也不一样,卡那儿了!

下面是能过poj的代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

const int MAXN = 25;
const int INF = 10000010;

struct Dist
{
	bool station;
	int num;
	int T;
	Dist()
	{
		station = false;
		num = 0;
		T = 0;
	}
}dist[MAXN];

int Edge[MAXN][MAXN];
int path[MAXN];
int S[MAXN];
int n;

int cmp(Dist a, Dist b)
{
	return a.T < b.T;
}

void Dijkstra(int v0)
{
	int i, j;
	for (i = 0; i < n; ++i)
	{
		dist[i].T = Edge[i][v0];
		S[i] = 0;
		if(Edge[i][v0] < INF && i != v0)
			path[i] = v0;
		else
			path[i] = -1;
	}
	S[v0] = 0;
	for (i = 1; i < n; ++i)
	{
		int MIN = INF, v;
		for (j = 0; j < n; ++j)
		{
			if(!S[j] && MIN > dist[j].T)
			{
				MIN = dist[j].T;
				v = j;
			}
		}
		S[v] = 1;
		for (j = 0; j < n; ++j)
		{
			if (!S[j] && Edge[j][v] < INF && dist[j].T > dist[v].T + Edge[j][v])
			{
				dist[j].T = dist[v].T + Edge[j][v];
				path[j] = v;
			}
		}
	}
}

void OutPut(int u)
{
	cout<<u+1<<"\t";
	if(path[u] != -1)
		OutPut( path[u] );
}

int main()
{
	//int T;
	int i, j;
	cin>>n;
	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < n; ++j)
		{
			cin>>Edge[i][j];
			if (Edge[i][j] == -1)
			{
				Edge[i][j] = INF;
			}
		}
	}
	int v0;
	cin>>v0;
	char s[1010];
	gets(s);
	int len = strlen(s);
	for (i = 0; i < len; ++i)
	{
		int t = s[i] - '0';
		dist[t-1].station = true;
		dist[t-1].num = t-1;
	}
	Dijkstra(v0-1);
	sort(dist, dist+n, cmp);
	cout<<"Org\tDest\tTime\tPath"<<endl;
	for (i = 0; i < n; ++i)
	{
		if (dist[i].station)
		{
			cout<<dist[i].num+1<<"\t"<<v0<<"\t"<<dist[i].T<<"\t";
			OutPut(dist[i].num);
			cout<<endl;
	}
}
	//system("pause");
	return 0;
}


版权声明:本文为博主原创文章,转载需注明出处。

zoj1053/poj1122-FDNY to the Rescue!

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=53 http://poj.org/problem?id=1122 总体来...

poj 1122||zoj 1053 FDNY to the Rescue!(最短路)

poj上过了,但zoj上SF到吐。 求路过的大牛指点一二。 #include #include #include #include #define inf 1000000 using ...
  • cqlf__
  • cqlf__
  • 2012年01月16日 00:34
  • 811

POJ 1122 FDNY to the Rescue! 反向dijkstra

链接: 1122 题意: 一个城市中有N个交叉路口,给出从一个交叉路口i到另一个交叉路口j所需要的时间(i,j=1~N,单向)如果edge[i][j]=-...
  • AXuan_K
  • AXuan_K
  • 2015年01月27日 15:54
  • 697

zoj 1053 && poj 1122 FDNY to the Rescue!

题意:给你一个图,求其中很多点到某一点的最短路径。其实反过来就是单源最短路径,写完才发现。。。 思路:直接求最短路径,Dijkstra解之。 代码: #include #include #...

POJ:1122 FDNY to the Rescue!

迪杰斯特拉算法求最短路。注意从i到j和从j到i用时是不同的,也就是是有向图。还有,最后要求的是从消防站到火警位置的最短用时,我因为这里没好好看题调了好久才发现。 最后递归打印路径即可。 #incl...
  • kkkwjx
  • kkkwjx
  • 2013年10月14日 16:51
  • 492

poj1122 - FDNY to the Rescue!

想看更多的解题报告:http://blog.csdn.net/wangjian8006/article/details/7870410                               转...

ZPJ - 1053 FDNY to the Rescue!(最短路 Dijkstra),POJ 1122

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1053

poj1122&zoj1053 FDNY to the Rescue!(dijkstra+输出路径)

题目请戳这里(poj)或这里(zoj) 题目大意:n个点表示n个路口,任意2个路口可能有一条路,现在给定一个着火点和若干消防局,求所有消防局到着火点最短距离并输出路径,按找距离升序输出,按样例输出。 ...

POJ--1122--FDNY to the Rescue!【最短路】

题意:给你一个邻接矩阵信息,某点发生火灾,告诉你一些位置有消防队,问各个消防队到火灾地点的最短时间,并输出最短路的路径,输出按最短时间由小到大排序。 就是一个最短路问题,输出路径,直接dij...
  • zzzz40
  • zzzz40
  • 2014年07月27日 23:41
  • 667

ZOJ-1053 FDNY to the Rescue!

FDNY to the Rescue! Time Limit: 2 Seconds      Memory Limit: 65536 KB The Fire Department...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1122 FDNY to the Rescue!
举报原因:
原因补充:

(最多只允许输入30个字)