532

#include <iostream>
#include <string.h>
#include <vector>
#include <cstdio>
#include <queue>

#define ll long long
#define INF 100000000
using namespace std;


int gr[32][32][32];
bool visit[32][32][32];
int dist[32][32][32];
int x,y,z;
int ex,ey,ez;
int L,R,C;



void bfs()
{
	int tmp_x,tmp_y,tmp_z;
	queue<int> q;
	q.push(x);
	q.push(y);
	q.push(z);

	visit[x][y][z]=1;
	dist[x][y][z] = 0;
	while(!q.empty())
	{
		tmp_x = q.front();
		q.pop();
		tmp_y = q.front();
		q.pop();
		tmp_z = q.front();
		q.pop();

		if(tmp_z+1<L && !visit[tmp_x][tmp_y][tmp_z+1] && gr[tmp_x][tmp_y][tmp_z+1]!=4)
		{
			visit[tmp_x][tmp_y][tmp_z+1]=1;
			dist[tmp_x][tmp_y][tmp_z+1] = min(dist[tmp_x][tmp_y][tmp_z+1],dist[tmp_x][tmp_y][tmp_z]+1);
			q.push(tmp_x);
			q.push(tmp_y);
			q.push(tmp_z+1);
		}
		if(tmp_z-1>=0 && !visit[tmp_x][tmp_y][tmp_z-1] && gr[tmp_x][tmp_y][tmp_z-1]!=4)
		{
			visit[tmp_x][tmp_y][tmp_z-1]=1;
			dist[tmp_x][tmp_y][tmp_z-1] = min(dist[tmp_x][tmp_y][tmp_z-1],dist[tmp_x][tmp_y][tmp_z]+1);
			q.push(tmp_x);
			q.push(tmp_y);
			q.push(tmp_z-1);
		}
		if(tmp_x+1<R && !visit[tmp_x+1][tmp_y][tmp_z] && gr[tmp_x+1][tmp_y][tmp_z]!=4)
		{
			visit[tmp_x+1][tmp_y][tmp_z]=1;
			dist[tmp_x+1][tmp_y][tmp_z] = min(dist[tmp_x+1][tmp_y][tmp_z],dist[tmp_x][tmp_y][tmp_z]+1);
			q.push(tmp_x+1);
			q.push(tmp_y);
			q.push(tmp_z);
		}
		if(tmp_x-1>=0 && !visit[tmp_x-1][tmp_y][tmp_z] && gr[tmp_x-1][tmp_y][tmp_z]!=4)
		{
			visit[tmp_x-1][tmp_y][tmp_z]=1;
			dist[tmp_x-1][tmp_y][tmp_z] = min(dist[tmp_x-1][tmp_y][tmp_z],dist[tmp_x][tmp_y][tmp_z]+1);
			q.push(tmp_x-1);
			q.push(tmp_y);
			q.push(tmp_z);
		}
		if(tmp_y-1>=0 && !visit[tmp_x][tmp_y-1][tmp_z] && gr[tmp_x][tmp_y-1][tmp_z]!=4)
		{
			visit[tmp_x][tmp_y-1][tmp_z]=1;
			dist[tmp_x][tmp_y-1][tmp_z] = min(dist[tmp_x][tmp_y-1][tmp_z],dist[tmp_x][tmp_y][tmp_z]+1);
			q.push(tmp_x);
			q.push(tmp_y-1);
			q.push(tmp_z);
		}
		if(tmp_y+1<C && !visit[tmp_x][tmp_y+1][tmp_z] && gr[tmp_x][tmp_y+1][tmp_z]!=4)
		{
			q.push(tmp_x);
			q.push(tmp_y+1);
			q.push(tmp_z);
			visit[tmp_x][tmp_y+1][tmp_z]=1;
			dist[tmp_x][tmp_y+1][tmp_z]=min(dist[tmp_x][tmp_y+1][tmp_z],dist[tmp_x][tmp_y][tmp_z]+1);
		}
	}
}


int main()
{
	char c;
	while(cin>>L)
	{
		cin>>R>>C;
		if(L+R+C==0)
		break;

		for(int i=0;i<L;i++)
		{
			for(int j=0;j<R;j++)
			{
				for(int k=0;k<C;k++)
				{
					dist[j][k][i]=INF;
					visit[j][k][i]=0;
					cin>>c;
					if(c=='S')
					{
						gr[j][k][i]=0;//src = 0
						x=j;y=k;z=i;//R,C,L
					}
					if(c=='E')
					{
						gr[j][k][i]=2;//exit = 2;
						ex=j;ey=k;ez=i;
					}
					if(c=='.')
					{
						gr[j][k][i]=1;//can move =1
					}
					if(c=='#')
					{
						gr[j][k][i]=4;//cant move = 4
					}
				}//1st for loop
			}//2nd for loop
			getchar();
		}//3rd for loop
		bfs();
		if(dist[ex][ey][ez]==INF)
		{
			cout<<"Trapped!\n";
		}
		else
		{
			cout<<"Escaped in ";
			cout<<dist[ex][ey][ez]<<" minute(s).\n";
		}

	}

	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *