基础BFS
就是多了一维,做法一样
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define ll long long
#define ul unsigned long long
#define sd(n) scanf("%d",&(n))
#define pd(n) printf("%d\n",(n))
#define INF 1000000000
struct node
{
int x,y,z;
}q[300000],cur;
int sx,sy,sz;
int ex,ey,ez;
int L,R,C;
int d[40][40][40];
char map[40][40][40];
int dx[6]={0,0,0,0,1,-1};
int dy[6]={1,0,-1,0,0,0};
int dz[6]={0,1,0,-1,0,0};
int bfs()
{
int head=0,tail=1;
for(int x=0;x<L;x++)
for(int y=0;y<R;y++)
for(int z=0;z<C;z++)
d[x][y][z]=INF;
q[head].x=sx;
q[head].y=sy;
q[head].z=sz;
d[sx][sy][sz]=0;
while(head<tail)
{
cur=q[head++];
for(int i=0;i<6;i++)
{
int nx=cur.x+dx[i];
int ny=cur.y+dy[i];
int nz=cur.z+dz[i];
if(nx>=0&&nx<L&&ny>=0&&nz>=0&&ny<R&&nz<C&&map[nx][ny][nz]!='#'&&d[nx][ny][nz]==INF)
{
q[tail].x=nx;
q[tail].y=ny;
q[tail++].z=nz;
d[nx][ny][nz]=d[cur.x][cur.y][cur.z]+1;
}
}
}
return d[ex][ey][ez];
}
int main()
{
while(~scanf("%d%d%d",&L,&R,&C))
{
if(L==0&&R==0&&C==0)
break;
for(int x=0;x<L;x++)
{
for(int y=0;y<R;y++)
{
scanf("%s",map[x][y]);
}
}
for(int x=0;x<L;x++)
{
for(int y=0;y<R;y++)
{
for(int z=0;z<C;z++)
{
if(map[x][y][z]=='S')
{
sx=x;
sy=y;
sz=z;
}
if(map[x][y][z]=='E')
{
ex=x;
ey=y;
ez=z;
}
}
}
}
int ans=bfs();
if(ans==INF)
printf("Trapped!\n");
else
printf("Escaped in %d minute(s).\n",ans);
}
}