Description
Is an escape possible? If yes, how long will it take?
Input
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
Output
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
三位BFS,判断边界时l,r,c顺序不能错,不然gg,代码如下:
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef struct node
{
int x,y,z;
node(int xx=0,int yy=0,int zz=0):x(xx),y(yy),z(zz){}
}node;
bool re[35][35][35];
int d[6][3]={{-1,0,0},{0,1,0},{1,0,0},{0,-1,0},{0,0,-1},{0,0,1}};
char Map[35][35][35];
int step[35][35][35];
int l,r,c;
node st,en;
bool ok(int x,int y,int z)
{
return x>=1&&x<=l&&y>=1&&y<=r&&z>=1&&z<=c&&Map[x][y][z]!='#';
}
bool BFS()
{
memset(re,false,sizeof(re));
memset(step,0,sizeof(step)); queue<node> q;
while(!q.empty()) q.pop(); node t;
q.push(st);
re[st.x][st.y][st.z]=true;
while(!q.empty())
{
t=q.front(),q.pop();
if(t.x==en.x&&t.y==en.y&&t.z==en.z) return true;
for(int i=0;i<6;++i)
{
int u=t.x+d[i][0],v=t.y+d[i][1],w=t.z+d[i][2];
if(ok(u,v,w)&&!re[u][v][w])
{
re[u][v][w]=true;
step[u][v][w]=step[t.x][t.y][t.z]+1;
q.push(node(u,v,w));
}
}
}
return false;
}
int main()
{
char a;
while(scanf("%d %d %d",&l,&r,&c)&&(l||r||c))
{
memset(Map,0,sizeof(Map));
getchar();
for(int i=1;i<=l;++i)
{
for(int j=1;j<=r;++j)
{
for(int k=1;k<=c;++k)
{
scanf("%c",&Map[i][j][k]);
if(Map[i][j][k]=='S') {st.x=i,st.y=j,st.z=k;}
else if(Map[i][j][k]=='E') {en.x=i,en.y=j,en.z=k;}
}
getchar();
}
getchar();
}
if(BFS()) {printf("Escaped in %d minute(s).\n",step[en.x][en.y][en.z]);}
else {printf("Trapped!\n");}
}
return 0;
}