立体bfs,共有六个方向:

const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};

AC代码

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

const int maxn = 32;
char G[maxn][maxn][maxn];
int d[maxn][maxn][maxn];

const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};

int l, r, c;

struct node{
	int x, y, z;
	node(){
	}
	node(int x, int y, int z):x(x), y(y), z(z){
	}
};

int bfs(int z, int x, int y) {
	memset(d, -1, sizeof(d));
	queue<node>q;
	q.push(node(x, y, z));
	d[z][x][y] = 0;
	while(!q.empty()){
		node p =q.front();
		q.pop();
		x = p.x, y = p.y, z = p.z;
		if(G[z][x][y] == 'E') return d[z][x][y];
		for(int i = 0; i < 6; ++i){
			int px = x + dx[i], py = y + dy[i], pz = z + dz[i];
			if(px < 0 || py < 0 || pz < 0 || px >= r || py >= c || pz >= l) continue;
			if(G[pz][px][py] == '#' || d[pz][px][py] != -1) continue;
			d[pz][px][py] = d[z][x][y] + 1;
			q.push(node(px, py, pz));
		}
	}
	return -1;
}

int main(){
	while(scanf("%d%d%d", &l, &r, &c) == 3 && l){
		for(int i = 0; i < l; ++i){
			for(int j = 0; j < r; ++j) scanf("%s", G[i][j]);
		}
		int ans;
		int x, y, z;
		for(int i = 0; i < l; ++i)
			for(int j = 0; j < r; ++j)
				for(int k = 0; k < c; ++k) {
					if(G[i][j][k] == 'S') {
						z = i, x = j, y = k;
						i = l, j = r, k = c;
					}
				}
		ans = bfs(z, x, y);
		if(ans == -1) printf("Trapped!\n");
		else printf("Escaped in %d minute(s).\n", ans);
	}
	return 0;
}

如有不当之处欢迎指出!

POJ - 2251 bfs [kuangbin带你飞]专题一的更多相关文章

  1. POJ - 3414 bfs [kuangbin带你飞]专题一

    状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可. d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量. AC代码 #include<cst ...

  2. POJ - 3984 bfs [kuangbin带你飞]专题一

    bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #inc ...

  3. HDU - 3533 bfs [kuangbin带你飞]专题二

    看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就 ...

  4. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  5. UVA - 11624 多点bfs [kuangbin带你飞]专题一

    题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...

  6. FZU - 2150 bfs [kuangbin带你飞]专题一

    题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...

  7. HDU - 2612 bfs [kuangbin带你飞]专题一

    分别以两个人的家作为起点,bfs求得到每个KFC最短距离.然后枚举每个KFC,求得时间之和的最小值即可. 此题不符合实际情况之处:  通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗? ...

  8. HDU - 1495 bfs [kuangbin带你飞]专题一

    模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...

  9. POJ - 3087 模拟 [kuangbin带你飞]专题一

    模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...

随机推荐

  1. 微信开发获取media_id错误码汇总

    微信开发遇到的错误汇总: 1. 错误代码40001 "errcode": 40001,    "errmsg": "invalid credentia ...

  2. __call PHP伪重载方法

    为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会 ...

  3. Python类的__getitem__和__setitem__特殊方法

    class testsetandget:    kk = {};      def __getitem__(self, key):          return self.kk[key];      ...

  4. fread和fwrite的使用

    fread和fwrite的使用 fread和fwrite一般用于二进制文件的输入/输出,要不然你打开fwrite写入的文件就是乱码. 1.fread和fwrite函数 数据块I/O fread与fwr ...

  5. js基本语法与变量

    1.//声明变量,js是弱类型语言,变量类型声明示没有意义的.变量类型是随时可以变化的.var a = 1;      a = "haha";    a = false;2.注释与 ...

  6. python 字符串操作方法详解

    字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多行组成,编写 ...

  7. Lucene 5.X 版本索引文件格式

    原文链接:https://my.oschina.net/rickylau/blog/527602 名称 文件拓展名 描述 段文件 segments_N 保存了索引包含的多少段,每个段包含多少文档. 段 ...

  8. 2018/2/5 ELK技术栈之ElasticSearch学习笔记

    npm config set registry https://registry.npm.taobao.org npm config get registry 支持跨域访问http.cors.enab ...

  9. 小甲鱼OD学习第11讲

    这次我们的任务是破解这个需要注册的软件,如下图所示 我们这次从字符串入手,我们查找 unregistered  字符串 然后我们在如下图的字符串下断点 然后我们来到断点处,我们观察到 地址为 0040 ...

  10. CA证书扫盲,https讲解。

    很多关于CA证书的讲解. 1.什么是CA证书. 看过一些博客,写的比较形象具体. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有 ...