POJ2457(广搜)

原创 2013年12月05日 20:57:06

需要输出路径,一开始没理清思路搞错了。

pre数组用来记录每个节点的父节点,记录路径。

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;

bool vstd[50005]={false};
int pre[50005];

struct Vertex
{
	int in,out;
	int pos;
}A[50005];

int main()
{
	queue<Vertex> Q;
	queue<int> path;
	int N,K;
	scanf("%d%d",&N,&K);
	int i;

	for (i=0;i<=N-1;i++)
	{
		scanf("%d%d",&A[i].in,&A[i].out);
		A[i].pos=i;
		if (A[i].in==1)
		{
			Q.push(A[i]);
			path.push(1);
			vstd[i]=true;
			pre[i]=-1;
		}
	}
	if (K==1)
		printf("1\n1\n");
	else
	{
		if (Q.empty())
			printf("-1\n");
		else
		{
			while (!Q.empty())
			{
				Vertex front=Q.front();
				if (front.out==K)
					break;

				for (i=0;i<=N-1;i++)
					if (!vstd[i] && A[i].in==front.out)
					{
						Q.push(A[i]);
						path.push(path.front()+1);
						vstd[i]=true;
						pre[i]=front.pos;
					}
				Q.pop();
				path.pop();
			}
			if (Q.empty())
				printf("-1\n");
			else
			{
				printf("%d\n",path.front()+1);
				int counter=0;
				int B[50005];
				int pos=Q.front().pos;
				while (pos!=-1)
				{
					B[counter++]=A[pos].in;
					pos=pre[pos];
				}
				for (i=counter-1;i>=0;i--)
					printf("%d\n",B[i]);
				printf("%d\n",K);
			}
		}
	}
	return 0;
}


【搜索-广搜】 迷宫的最短路径

题目: 给定一个大小为N*M的迷宫,由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置。试求出起点到终点的最小步数。(本题假定迷宫是...
  • baidu_35643793
  • baidu_35643793
  • 2017年02月14日 15:13
  • 649

深搜与广搜

深度优先搜索与广度优先搜索 深度优先搜索的思想是尽可能深的搜索,算法艺术与信息学竞赛一书中提到:随机搜索就像是在慌乱之中找东西,因为你并不知道东西在哪,广度优先搜索则像是你的眼镜掉在地上之 深度优...
  • Xwxcy
  • Xwxcy
  • 2015年12月06日 14:10
  • 2420

poj 1164 简单地广搜

///////////////////////////////////// 我觉得 //////////////////////////////////////// /* 28...
  • u013795429
  • u013795429
  • 2014年11月13日 19:21
  • 390

广搜模板——HDU ACM 1312解题报告

 戴哥哥讲了很久的一道题,后续题的基础#include iostream>#include queue>using namespace std;struct node{    int x,y;};i...
  • nicole_yaoyao
  • nicole_yaoyao
  • 2010年01月11日 19:43
  • 1630

广搜 基础 走迷宫 记录路径

#include #include #include #include #include #define N 5 using namespace std; const int dx[4] =...
  • DHBLOG
  • DHBLOG
  • 2014年07月16日 16:41
  • 1080

迷宫问题——经典广搜

广度优先搜索Breadth-First-Search,对于每个节点
  • u014391294
  • u014391294
  • 2014年06月03日 14:02
  • 570

POJ 3984 迷宫问题 广搜迷宫解法

本题是经典的迷宫搜索问题了,使用广搜比使用深搜效率要高。 思路关键点: 1 从终点出发查找起点,这样方便记录路径 2 每次查找到下一个空格,可走方格之后,可以马上标识该格为不可走了 3 找到起点之后,...
  • kenden23
  • kenden23
  • 2014年10月29日 09:55
  • 2089

深搜和广搜简单对比

深搜和广搜在实现上分别用的是栈(函数递归本质是一样)和队列。广搜一般对于寻找最优解的情况有比较好的时间控制,但是比较消耗内存。相反深搜却比较省内存但在时间上会有所消耗! 各种动态的表示和形象化的动态...
  • A948433271
  • A948433271
  • 2015年07月24日 21:01
  • 3141

深搜和广搜算法

深搜和广搜算法思想 本文转载自:http://blog.csdn.net/bool_isprime/archive/2010/08/11/5803018.aspx ...
  • lh__huahuan
  • lh__huahuan
  • 2015年03月25日 20:36
  • 3726

广搜和深搜总结

BFS #include #include #include #include using namespace std; const int maxn=100; bool v...
  • qq_25931695
  • qq_25931695
  • 2015年08月02日 15:48
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ2457(广搜)
举报原因:
原因补充:

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