bfs
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int d[N][N][N];
char g[N][N][N];
int l,r,c;
int dx[]={-1,0,1,0,0,0},dy[]={0,1,0,-1,0,0},dz[]={0,0,0,0,1,-1};
struct Node
{
int x,y,z;
}st;//三维信息用结构体储存
void bfs()
{
queue<Node> q;//定义结构体队列
q.push(st);//起始点入队
d[st.x][st.y][st.z]=0;
while(q.size())
{
Node t=q.front();
q.pop();
for(int i=0;i<6;i++)
{
int aa=t.x+dx[i],bb=t.y+dy[i],h=t.z+dz[i];
if(g[aa][bb][h]=='.'&&d[aa][bb][h]==-1)
{
g[aa][bb][h]='#';
d[aa][bb][h]=d[t.x][t.y][t.z]+1;
q.push({aa,bb,h});
}
if(g[aa][bb][h]=='E')
{
printf("Escaped in %d minute(s).\n",d[t.x][t.y][t.z]+1);
return ;
}
}
}
cout<<"Trapped!"<<endl;
return ;
}
int main()
{
while(cin>>l>>r>>c,l||r||c)
{
memset(g,'#',sizeof g);
memset(d,-1,sizeof d);//切记初始化二维数组和距离数组
for(int i=0;i<l;i++)
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
{
cin>>g[i][j][k];
if(g[i][j][k]=='S')
{
st={i,j,k};//记录起始点位置
}
}
bfs();
}
return 0;
}