【BFS】逃离地牢(C++)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/liuzich/article/details/100040994

Description
贝茜被困在了一个三维立体的地牢里,这个地牢是一个立方体,由通道和岩石组成。贝茜只能往东、南、西、北、上、下六个方向走,且每走一步要花费1个单位的时间。现在将地牢的详细布局给你?你能逃出地牢么?如果能的话,最少要花多少时间呢?

Input
第一行包括三个数L R C,分别表示地牢的长宽高。(长宽高不会超过30)
接下来输入L个R*C的矩阵,两个矩阵之间用一个空行隔开,描述地牢的详细情况。其中‘S’表示贝茜的起点,‘E’表示终点,‘.’表示该位置是通道,可以通行,‘#’表示该位置为岩石,不可以通行。
起点终点各只有一个

Output
如果可以达到终点,输入:” Escaped in x minute(s).”,其中x表示最短的时间;如果无法到达终点,输出:“Trapped!”。

Sample Input

3 4 5
S....
.###.
.##..
###.#

#####
#####
##.##
##...

#####
#####
#.###
####E 

Sample Output

Escaped in 11 minute(s).

HINT

这应该是我做过的BFS的题中最简单 难的了,和其他题的思路差不多,就是将二维迷宫变成了个三维迷宫,再就是改一些变量
我做这题时将数组开太大了(我以为三维数组可以开成1000*1000*1000),结果编译错误了
在这里插入图片描述
下面是代码:
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


#include <bits/stdc++.h>
using namespace std;
struct data {
	int x,y,z;
};
int n,m,g,qx,qy,qz,zx,zy,zz,ans[58][58][58];
int xxx[7]= {0,1,-1,0,0,0,0};
int yyy[7]= {0,0,0,1,-1,0,0};
int zzz[7]= {0,0,0,0,0,1,-1};
data p[10008];
char a[58][58][58];
void bfs() {
	int head=1;
	int tail=1;
	p[1].x=qx;
	p[1].y=qy;
	p[1].z=qz;
	while(head<=tail) {
		for(int i=1; i<=6; i++) {
			data o;
			o.x=p[head].x+xxx[i];
			o.y=p[head].y+yyy[i];
			o.z=p[head].z+zzz[i];
			if(a[o.x][o.y][o.z]=='.'||a[o.x][o.y][o.z]=='E') {
				//cout<<o.x<<" "<<o.y<<" "<<o.z<<endl;
				//system("pause");
				a[o.x][o.y][o.z]='#';
				tail++;
				p[tail].x=o.x;
				p[tail].y=o.y;
				p[tail].z=o.z;
				ans[o.x][o.y][o.z]=ans[p[head].x][p[head].y][p[head].z]+1;
				if(o.x==zx&&o.y==zy&&o.z==zz) {
					cout<<"Escaped in "<<ans[o.x][o.y][o.z]<<" minute(s)."<<endl;
					return ;
				}
			}
		}
		head++;
	}
	cout<<"Trapped!"<<endl;
}
int main() {
	cin>>g>>n>>m;
	for(int l=1; l<=g; l++) {
		for(int j=1; j<=n; j++) {
			for(int i=1; i<=m; i++) {
				cin>>a[l][i][j];
				if(a[l][i][j]=='S') {
					qx=l,qy=i,qz=j;
				}
				if(a[l][i][j]=='E') {
					zx=l,zy=i,zz=j;
				}
			}
		}
	}
	bfs();

	return 0;
}

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

猜你喜欢

转载自blog.csdn.net/liuzich/article/details/100040994