#include<stdio.h>
#include<string.h>
int dl[6]={0,0,0,0,1,-1};
int dr[6]={-1,+1,0,0,0,0};
int dc[6]={0,0,-1,+1,0,0};
const int max = 35;
char dung[35][35][35];
int dist[35][35][35];
int visit[35][35][35];
int q[max*max*max];
int l,r,c;
void bfs(int i,int j,int k);
int main()
{
//
freopen("input.txt","r",stdin);
while(scanf("%d%d%d",&l,&r,&c)==3)
{
if(!l&&!r&&!c) break;
memset(visit,0,sizeof(visit));
memset(dist,-1,sizeof(dist));
int si,sj,sk;
int ei,ej,ek;
for(int i = 0; i < l;i++)
{
for(int j = 0; j < r; j++)
{
scanf("%s",dung[i][j]);
char* p = strchr(dung[i][j],'S');
char* q = strchr(dung[i][j],'E');
if(p)
{
si = i;
sj = j;
sk = p-dung[i][j];
}
if(q)
{
ei = i;
ej = j;
ek = q-dung[i][j];
}
}
}
//
bfs(si,sj,sk);
int dis = dist[ei][ej][ek];
if(dis!=-1)
printf("Escaped in %d minute(s).\n",dis);
else
printf("Trapped!\n");
}
}
void bfs(int i,int j,int k)
{
int front = 0;
int rear = 0;
int u = i*max*max+j*max+k;
q[rear++]=u;
dist[i][j][k] = 0;
visit[i][j][k] = 1;
while(front<rear)
{
u = q[front++];
i = u/max/max;
j = u/max%max;
k = u%max;
for(int d = 0; d < 6;d++)
{
int ni = i+dl[d];
int nj = j+dr[d];
int nk = k+dc[d];
if(ni>=0&& ni<l&& nj>=0&& nj<r&& nk>=0&& nk<c\
&& dung[ni][nj][nk]!='#' &&visit[ni][nj][nk]==0)
{
u = ni*max*max+nj*max+nk;
q[rear++] = u;
visit[ni][nj][nk] = 1;
dist[ni][nj][nk] = dist[i][j][k]+1;
if(dung[ni][nj][nk]=='E') return;
}
}
}
}
532UVa三维迷宫
最新推荐文章于 2022-07-30 16:21:18 发布