#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
char map[35][35][35];
int vis[35][35][35];
int k,n,m,sx,sy,sz,ex,ey,ez;
int d[6][3]={
{
0,0,1},{
0,0,-1},{
0,1,0},{
0,-1,0},{
1,0,0},{
-1,0,0}};
struct node
{
int x,y,z,step;
};
int check(int x,int y,int z)//检查此点是否合理
{
if(x<0||y<0||z<0||x>=k||y>=n||z>=m)
return 1;
else if(map[x][y][z]=='#')
return 1;
else if(vis[x][y][z])
return 1;
else
return 0;
}
int bfs()
{
node a,next;
queue<node> q;
a.x=sx;a.y=sy;a.z=sz;a.step=0;
vis[sx][sy][sz]=1;
q.push(a);
while(!q.empty())
{
a=q.front();
q.pop();
if(a.x==ex&&a.y==ey&&a.z==ez)
return a.step;
for(int i=0;i<6;i++)
{
next=a;
next.x+=d[i][0];
next.y+=d[i][1];
next.z+=d[i][2];
if(check(next.x,next.y,next.z))
continue;
vis[next.x][next.y][next.z]=1;
next.step+=1;
q.push(next);
}
}
return 0;
}
int main()
{
while(scanf("%d %d %d",&k,&n,&m)!=EOF)
{
if(k==0&&n==0&&m==0)
break;
for(int i=0;i<k;i++)
{
for(int j=0;j<n;j++)
{
scanf("%s",map[i][j]);
for(int r=0;r<m;r++)
{
if(map[i][j][r]=='S')
{
sx=i;sy=j;sz=r;
}
else if(map[i][j][r]=='E')
{
ex=i;ey=j;ez=r;
}
}
}
}
memset(vis,0,sizeof(vis));
int result=bfs();
if(result)
printf("Escaped in %d minute(s).\n",result);
else
printf("Trapped!\n");
}
return 0;
}
POJ2251 Dungeon Master(BFS)
猜你喜欢
转载自blog.csdn.net/weixin_44063734/article/details/108355163
今日推荐
周排行