题目描述
同题”走迷宫”,从二维->三维,每次在同一个位置的可选方向由4种->6种同时坐标为三维,可用结构体来存储
C++ 代码
#include<iostream>
#include<cstring>
#include<queue>
#include<bits/stdc++.h>
using namespace std;
const int N=110;
char g[N][N][N];
int d[N][N][N];
struct point{
int X,Y,Z;
}st,ed;
int l,r,c;
// int dx[6]={1,-1,0,0,0,0};
// int dy[6]={0,0,1,-1,0,0};
// int dz[6]={0,0,0,0,1-1,};
int bfs()
{
memset(d,-1,sizeof d);
d[st.Z][st.X][st.Y]=0;
queue<point> q;
q.push(st);
int dx[6]={-1,1,0,0,0,0};
int dy[6]={0,0,-1,1,0,0};
int dz[6]={0,0,0,0,-1,1};
while(!q.empty())
{
auto t=q.front();
q.pop();
for(int i=0;i<6;i++)
{
int x=t.X+dx[i],y=t.Y+dy[i],z=t.Z+dz[i];
// if(x<0||x>=r||y<0||y>=c||z<0||z>=l) continue;
// if(g[z][x][y]=='#'||d[z][x][y]!=-1) continue;
// if(x==ed.X && y==ed.Y && z==ed.Z) return d[t.Z][t.X][t.Y]+1;
// d[z][x][y]=d[t.Z][t.X][t.Y]+1;
// q.push({x,y,z});
if(x>=0 && x<r && y>=0 &&y<c && z>=0 && z<l && d[z][x][y]==-1 && g[z][x][y]!='#')
{
d[z][x][y]=d[t.Z][t.X][t.Y]+1;
// if(x==ed.X && y==ed.Y && z==ed.Z)
// return d[z][x][y];
q.push({x,y,z});
}
}
}
return d[ed.Z][ed.X][ed.Y];
//return -1;
}
int main()
{
while(cin>>l>>r>>c,l||r||c)
{
for(int i=0;i<l;i++)
for(int j=0;j<r;j++)
for(int m=0;m<c;m++)
{
cin>>g[i][j][m];
if(g[i][j][m]=='S')
st={j,m,i};
if(g[i][j][m]=='E')
ed={j,m,i};
}
int res=bfs();
if(res==-1) puts("Trapped!");
else printf("Escaped in %d minute(s).\n",res);
}
return 0;
}