View Code of Problem 1313

#include<iostream>
#include<Cstring>
#include<queue>
using namespace std;
int n,m,b,a1,b1,c1;
struct node{
	int x;int y;int z;int d;
};
int x[6]={0,-1,0,1,0,0};
int y[6]={-1,0,1,0,0,0};
int z[6]={0,0,0,0,1,-1};
char c[35][35][35];
bool f[35][35][35];
int bfs(){
	struct node l;
	l.x=a1;
	l.y=b1;
	l.z=c1;
	l.d=0;
	queue<node>q;
	q.push(l);
	while(!q.empty()){
		for(int i=0;i<6;++i){
			int xx=q.front().x+x[i];
			int yy=q.front().y+y[i];
			int zz=q.front().z+z[i];
			if(xx>0&&xx<=n&&yy>0&&yy<=m&&zz>0&&zz<=b&&c[xx][yy][zz]!='#'&&f[xx][yy][zz]==false){
				f[xx][yy][zz]=true;
				if(c[xx][yy][zz]=='E')
				return q.front().d+1;
				struct node k;
				k.x=xx;
				k.y=yy;
				k.z=zz;
				k.d=q.front().d+1;
				q.push(k);
			}
		}
		q.pop();
	}	
	return 0;
}
int main(){
	while(scanf("%d %d %d",&n,&m,&b)){
		getchar();
		if(n==0&&m==0&&b==0)
		break;
		memset(f,false,sizeof(f));
		for(int i=1;i<=n;++i){
			for(int j=1;j<=m;++j){
				for(int k=1;k<=b;++k){
					scanf("%c",&c[i][j][k]);
					if(c[i][j][k]=='S')
					a1=i,b1=j,c1=k;
				}
				getchar();
			}
			getchar();
		}
		int ans=bfs();
		if(ans==0)
		cout<<"Trapped!"<<endl;
		else
		printf("Escaped in %d minute(s).\n",ans);
	}
}

Double click to view unformatted code.


Back to problem 1313