#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
struct Point
{
int x,y,z;
} tmp,tmp1;
int l,r,c;
int vis[35][35][35];
char str[35][35][35];
int d[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
queue<Point>q;
int BFS(Point t,Point s)
{
Point p,tmp2;
while(!q.empty())
{
q.pop();
}
vis[t.x][t.y][t.z] = 1;
q.push(t);
while(!q.empty())
{
p = q.front();
q.pop();
for(int i = 0; i < 6; i++)
{
tmp2.x = p.x + d[i][0];
tmp2.y = p.y + d[i][1];
tmp2.z = p.z + d[i][2];
if(!vis[tmp2.x][tmp2.y][tmp2.z] && str[tmp2.x][tmp2.y][tmp2.z] != '#' && tmp2.x >= 0 && tmp2.x < l && tmp2.y >= 0 && tmp2.y < r && tmp2.z >= 0 && tmp2.z < c)
{
vis[tmp2.x][tmp2.y][tmp2.z] = vis[p.x][p.y][p.z] + 1;
q.push(tmp2);
//printf("%d %d %d %d\n",tmp2.x,tmp2.y,tmp2.z,vis[tmp2.x][tmp2.y][tmp2.z]);
}
}
if(vis[s.x][s.y][s.z])
break;
}
return vis[s.x][s.y][s.z] - 1;
}
int main()
{
while(~scanf("%d%d%d",&l,&r,&c))
{
if(l == 0 && r == 0 & c == 0)
return 0;
memset(str,'0',sizeof(str));
memset(vis,0,sizeof(vis));
for(int i = 0; i < l; i++)
for(int j = 0; j < r; j++)
scanf("%s",str[i][j]);
for(int i = 0; i < l; i++)
for(int j = 0; j < r; j++)
for(int k = 0; k < c; k++)
{
if(str[i][j][k] == 'S')
{
tmp.x = i;
tmp.y = j;
tmp.z = k;
//printf("%d %d %d\n",i,j,k);
}
if(str[i][j][k] == 'E')
{
tmp1.x = i;
tmp1.y = j;
tmp1.z = k;
// printf("%d %d %d\n",i,j,k);
}
}
int ans = BFS(tmp,tmp1);
if(ans <= 0)
printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n",ans);
}
return 0;
}
POJ2251.Dungeon Master(三維BFS)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.