#include<bits/stdc++.h>
using namespace std;
const int N=110;
int l,r,c;
char g[N][N][N];
int dist[N][N][N];
struct point //三维的话,考虑这样做一个结构体。三维其实不可怕,跟二维差不多。
{
int x,y,z;
};
int dx[6]={-1,0,1,0,0,0};
int dy[6]={0,-1,0,1,0,0};
int dz[6]={0,0,0,0,1,-1}; //这是三维移动的关键,记住这个小技巧!!!亲爱的
int bfs(point p) //bfs
{
memset(dist,-1,sizeof dist); //因为要测试多组数据。所以每次bfs都要记得将dist初始化哦
dist[p.x][p.y][p.z]=0;
queue<point>q;
q.push(p);
while(q.size())
{
auto t=q.front();
q.pop();
for(int i=0;i<6;i++)
{
int x1=t.x+dx[i],y1=t.y+dy[i],z1=t.z+dz[i];
if(x1>=0&&x1<l&&y1>=0&&y1<r&&z1>=0&&z1<c&&g[x1][y1][z1]!='#'&&dist[x1][y1][z1]==-1)
{
dist[x1][y1][z1]=dist[t.x][t.y][t.z]+1;
if(g[x1][y1][z1]=='E')
{
return dist[x1][y1][z1];
}
q.push({x1,y1,z1});
}
}
}
return -1;
}
int main()
{
while(cin>>l>>r>>c,l||r||c)
{
point p1;
for(int k=0;k<l;k++)
{
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cin>>g[k][i][j];
if(g[k][i][j]=='S')
{
p1={k,i,j};
}
}
}
}
int ans=bfs(p1);
if(ans==-1)cout<<"Trapped!"<<endl;
else cout<<"Escaped in "<< ans<<" minute(s)."<<endl;
}
return 0;
}
05-11
787
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
02-25
220
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-07
219
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交