poj-2251 广搜

http://poj.org/problem?id=2251

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<vector>
#include<string.h>
#include<queue>
#include<stack>
#include<set>
#include<sstream>
#include<time.h>
#include<utility>
#include<malloc.h>
#include<stdexcept>
#include<iomanip>
#include<iterator>  

using namespace std;

char map[40][40][40];
int vis[40][40][40];
int L, R, C;

struct node
{
	int z, x, y;
	int c;
};

int dir[6][3] = { { 1, 0, 0 }, { -1, 0, 0 }, { 0, -1, 0 }, { 0, 1, 0 }, { 0, 0, -1 }, { 0, 0, 1 } };

int BFS(int si, int sj, int sk)
{
	memset(vis, 0, sizeof(vis));

	queue<node> q;
	node cur, next;

	cur.z = si, cur.x = sj, cur.y = sk, cur.c = 0;

	vis[si][sj][sk] = 1;

	q.push(cur);

	while (!q.empty())
	{
		cur = q.front();
		q.pop();
		for (int i = 0; i < 6; i++)
		{
			next.z = cur.z + dir[i][0];
			next.x = cur.x + dir[i][1];
			next.y = cur.y + dir[i][2];
			next.c = cur.c + 1;
			if (next.z<1 || next.z>L || next.x<1 || next.x>R || next.y<1 || next.y>C || map[next.z][next.x][next.y] == '#')
				continue;
			if (map[next.z][next.x][next.y] == 'E')
				return next.c;
			if (!vis[next.z][next.x][next.y])
			{
				vis[next.z][next.x][next.y] = 1;
				q.push(next);
			}
		}
	}
	return 0;
}

int main()
{
	int si, sj, sk;
	while (cin >> L >> R >> C)
	{
		if (L == 0 && R == 0 && C == 0)
			break;

		for (int i = 1; i <= L; i++)
			for (int j = 1; j <= R; j++)
				for (int k = 1; k <= C; k++)
				{
					cin >> map[i][j][k];
					if (map[i][j][k] == 'S')
					{
						si = i; sj = j; sk = k;
					}
				}
		int ans = BFS(si, sj, sk);
		if (ans == 0)
			printf("Trapped!\n");
		else
			printf("Escaped in %d minute(s).\n", ans);

	}
	return 0;
}
时间: 2024-10-09 21:15:03

poj-2251 广搜的相关文章

poj 2251(广搜求两点之间的距离)

题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16682   Accepted: 6491 Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit

POJ 1062 广搜+剪枝

昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37139   Accepted: 10721 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币.如果你能够弄来他的水晶球,那么只要5000

POJ 3322(广搜)

---恢复内容开始--- http://poj.org/problem?id=3322 题意:http://jandan.net/2008/01/24/bloxorz.html就是这个鬼游戏 我也是郁闷了,昨天就看到一道连连看的题目,今天就是这个游戏.都懵逼了. 思路:这个游戏的难度主要是在于它是第一个长方体,而不是一个正方体,不过是正方体也就不存在这个游戏了,所以我们要想办法来标记它. 我首先定义了这个长方体有三种状态. 对于第一种状态来说,它是的底面是一个正方形,四边都是一个长方形. 第二种

POJ 2251宽搜、

因为这个题做了两次犯了两次不同的错误. 第一次用的dfs死活都超时 第二次把定义队列定义在了全局变量的位置,导致连WA了几次.最后找到原因的我真的想一巴掌拍死自己 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 const int qq=40; 6 int vis[qq][qq][qq]; 7 char map[qq][qq][qq]; 8 int tz,

Poj3414广搜

<span style="color:#330099;">/* D - D Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3414 Description You are given two pots, having the volume of A and B liters respectively. The follow

POJ 2251 三维广搜。

B - Dungeon Master Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is com

poj 2251 Dungeon Master(简单三维广搜)

题意: 之前做过的所有题都是   在一个平面   上搜索 . 本题很新,在一个三维空间里 ,首先   l  x  y   分别代表 l 层   每一层有 x 行   y 列 问从 S 开始   走到 E   最小步是多少    显然用广搜,只是多了一个向上向下的搜索. 注意: 所谓广搜  ,是一层一层的搜,  每一层其步数是一样的   ,可以通过建立一个数组存步数 ,也可以 将步数同时存入队列中 另外搜过的要做标记, 在做标记时  尽量要在里面做标记(就是每搜过一个点就  立马 将之标记)不然一

poj 1166 The Clocks 记录路径的广搜

题意: 给9个时钟的初始状态,和一些对某几个钟的操作,求最少经过几步能到目标状态(全指向12点). 分析: 明显的广搜,但实现起来的细节要注意:1.因为要记录路径,所以要在整个程序执行过程中扩展出的节点在输出路径前不能销毁, 故采用静态内存分配的方法(开node[600000],用get_node()创建节点.2.queue<node>比queue<int>要多花1别的时间. //poj 1166 //sep9 #include <iostream> #include

双向广搜 POJ 3126 Prime Path

POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted: 9153 Description The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change th

广搜+打表 POJ 1426 Find The Multiple

POJ 1426   Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25734   Accepted: 10613   Special Judge Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representati