#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
bool map[40][40][40];
struct pos{
int x,y,z;
int min;
}q[50000];
pos s,e;
int x,y,z;
bool flag;
bool bfs()
{
int qs=0,qe=0;
q[qe].x=s.x;
q[qe].y=s.y;
q[qe].z=s.z;
q[qe++].min=0;
map[s.x][s.y][s.z]=false;
while(qs<qe)
{
pos tt=q[qs++];
if(tt.x==e.x&&tt.y==e.y&&tt.z==e.z)
{
e.min=tt.min;
return true;
}
if(map[tt.x-1][tt.y][tt.z]&&tt.x>1)
{
q[qe].x=tt.x-1;
q[qe].y=tt.y;
q[qe].z=tt.z;
q[qe++].min=tt.min+1;
map[tt.x-1][tt.y][tt.z]=false;
}
if(map[tt.x+1][tt.y][tt.z]&&tt.x<x)
{
q[qe].x=tt.x+1;
q[qe].y=tt.y;
q[qe].z=tt.z;
q[qe++].min=tt.min+1;
map[tt.x+1][tt.y][tt.z]=false;
}
if(map[tt.x][tt.y-1][tt.z]&&tt.y>1)
{
q[qe].x=tt.x;
q[qe].y=tt.y-1;
q[qe].z=tt.z;
q[qe++].min=tt.min+1;
map[tt.x][tt.y-1][tt.z]=false;
}
if(map[tt.x][tt.y+1][tt.z]&&tt.y<y)
{
q[qe].x=tt.x;
q[qe].y=tt.y+1;
q[qe].z=tt.z;
q[qe++].min=tt.min+1;
map[tt.x][tt.y+1][tt.z]=false;
}
if(map[tt.x][tt.y][tt.z-1]&&tt.z>1)
{
q[qe].x=tt.x;
q[qe].y=tt.y;
q[qe].z=tt.z-1;
q[qe++].min=tt.min+1;
map[tt.x][tt.y][tt.z-1]=false;
}
if(map[tt.x][tt.y][tt.z+1]&&tt.z<z)
{
q[qe].x=tt.x;
q[qe].y=tt.y;
q[qe].z=tt.z+1;
q[qe++].min=tt.min+1;
map[tt.x][tt.y][tt.z+1]=false;
}
}
return false;
}
int main(){
while(~scanf("%d%d%d",&x,&y,&z)&& x && y && z)
{
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
for(int k=1;k<=z;k++)
{
char temp;
scanf(" %c",&temp);
if(temp=='.')
map[i][j][k]=true;
if(temp=='#')
map[i][j][k]=false;
if(temp=='S')
{
map[i][j][k]=true;
s.x=i;
s.y=j;
s.z=k;
}
if(temp=='E')
{
map[i][j][k]=true;
e.x=i;
e.y=j;
e.z=k;
}
}
flag=bfs();
if(flag)
printf("Escaped in %d minute(s).\n",e.min);
else
printf("Trapped!\n");
}
return 0;
}
poj 2251 Dungeon Master
最新推荐文章于 2024-01-18 16:54:48 发布