这道题是一道很简单的入门搜索题,因为自己的疏忽浪费了近1个小时找错(感觉找错是一个很枯燥的过程 。。。)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int l,r,c,m;
int a1,b1,c1,a2,b2,c2;
char s[31][31][31];
int v[31][31][31];
int a[6][3]={
1,0,0,
-1,0,0,
0,1,0,
0,-1,0,
0,0,1,
0,0,-1
};
struct node
{
int x,y,z;
int k;
};
int check(int x2,int y2,int z2)
{
if(x2>=0&&x2<l && y2>=0&&y2<r && z2>=0&&z2<c && s[x2][y2][z2]!='#' && v[x2][y2][z2]!=1) //当时把 s[x2][y2][z2]!='#'; 写成了 s[x2][y2][z2]=='.' ;使循环永远不可能到达s[x2][y2][z2]='E'; 一直输出Trapped!
return 1;
return 0;
}
int bfs(int x1,int y1,int z1)
{
queue<node>q;
node w,h;
w.x=x1;
w.y=y1;
w.z=z1;
w.k=0;
v[x1][y1][z1]=1;
q.push(w);
while(!q.empty())
{
w=q.front();
q.pop();
/*if(s[w.x][w.y][w.z]=='E')
return w.k;*/
if(w.x==a2 && w.y==b2 && w.z==c2)
return w.k;
for(int i=0;i<6;i++)
{
h.x=w.x+a[i][0];
h.y=w.y+a[i][1];
h.z=w.z+a[i][2];
if(check(h.x,h.y,h.z))
{
h.k=w.k+1;
v[h.x][h.y][h.z]=1;
q.push(h);
}
}
}
return -1;
}
int main()
{
while(~scanf("%d%d%d",&l,&r,&c))
{
if(l==0 && r==0 && c==0)
break;
memset(v,0,sizeof(v));
for(int i=0;i<l;i++)
{
for(int j=0;j<r;j++)
{
scanf("%s",s[i][j]);
for(int n=0;n<c;n++)
{
if(s[i][j][n]=='S')
{
a1=i;b1=j;c1=n;
}
if(s[i][j][n]=='E')
{
a2=i;b2=j;c2=n;
}
}
}
getchar();
}
/*for(int i=0;i<l;i++)
for(int j=0;j<r;j++)
for(int n=0;n<c;n++)
{
if(s[i][j][n]=='S')
m=bfs(i,j,n);
}*/
m=bfs(a1,b1,c1);
if(m==-1)
printf("Trapped!\n");
else
printf("Escaped in %d minute(s).\n",m);
}
return 0;
}