题目描述
找出最短路径,bfs秒了。根据acwing1101题改编代码。不懂地方欢迎询问,共同进步
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=120;
int L,R,C,disc[N][N][N];
char st[N][N][N];
struct tmp
{
int z,x,y;
};
int zd[6]={1,-1,0,0,0,0},xd[6]={0,0,1,-1,0,0},yd[6]={0,0,0,0,-1,1};
int bfs(tmp start)
{
queue<tmp> ch;
ch.push(start);
memset(disc,-1,sizeof disc);
disc[start.z][start.x][start.y]=0;
while(ch.size())
{
tmp t=ch.front();
ch.pop();
for(int i=0;i<6;i++)
{
int a=t.z+zd[i],b=t.x+xd[i],c=t.y+yd[i];
if(a>=0&&a<L&&b>=0&&b<R&&c>=0&&c<C&&st[a][b][c]!='#'&&disc[a][b][c]==-1)
{
disc[a][b][c]=disc[t.z][t.x][t.y]+1;
if(st[a][b][c]=='E')return disc[a][b][c];
ch.push({a,b,c});
}
}
}
return -1;
}
int main()
{
tmp start;
while(scanf("%d%d%d",&L,&R,&C),L||R||C)
{
for(int i=0;i<L;i++)
{
for(int j=0;j<R;j++)
{
for(int t=0;t<C;t++)
{
scanf(" %c",&st[i][j][t]);
if(st[i][j][t]=='S')start={i,j,t};
}
}
}
int res=bfs(start);
if(res!=-1)printf("Escaped in %d minute(s).\n",res);
else printf("Trapped!\n");
}
return 0;
}