题目链接
这一道题是三维的走迷宫,bfs就可以了;
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node
{
int x,y,z,l;
} s,e,k,t;
int to[6][3]= {1,0,0, -1,0,0, 0,1,0, 0,-1,0, 0,0,1, 0,0,-1}; //方向辅助数组
char G[40][40][40]; //存图
bool vis[40][40][40]; //标记状态
int main()
{
int l,r,c;
while(~scanf("%d%d%d",&l,&r,&c)&&l&&r&&c)
{
memset(vis,0,sizeof(vis));
for(int i=0; i<l; i++)
for(int j=0; j<r; j++)
for(int k=0; k<c; k++)
{
cin>>a[i][j][k];
if(a[i][j][k]=='S')s.x=i,s.y=j,s.z=k,s.l=0; //存起点
if(a[i][j][k]=='E')e.x=i,e.y=j,e.z=k; //存终点
}
queue<node>q;
q.push(s); //压入起点
vis[s.x][s.y][s.z]=1;
while(!q.empty())
{
k=q.front();
if(k.x==e.x&&k.y==e.y&&k.z==e.z)break; //判断是否到达终点
q.pop();
for(int i=0; i<6; i++) //向相邻点遍历
{
t.x=k.x+to[i][0];
t.y=k.y+to[i][1];
t.z=k.z+to[i][2];
t.l=k.l+1; //记录步数
if(vis[t.x][t.y][t.z]==0&&a[t.x][t.y][t.z]=='.'||a[t.x][t.y][t.z]=='E')
q.push(t);
vis[t.x][t.y][t.z]=1;
}
}
if(q.empty())
cout<<"Trapped!"<<endl;
else
printf("Escaped in %d minute(s).\n",k.l);
}
return 0;
}