题解
2025-08-17 08:39:37
发布于:广东
2阅读
0回复
0点赞
偏移数组为dx[7]={0,-1,0,1,0,0,0},dy[7]={0,0,1,0,-1,0,0},dz[7]={0,0,0,0,0,-1,1}
#include<bits/stdc++.h>
using namespace std;
int a,b,c,dx[7]={0,-1,0,1,0,0,0},dy[7]={0,0,1,0,-1,0,0},dz[7]={0,0,0,0,0,-1,1};
char m[105][105][105];
bool vis[105][105][105];
int sx,sy,sz,fx,fy,fz;
struct node
{
int x,y,z,step;
};
void bfs()
{
queue<node> q;
q.push(node{sx,sy,sz,0});
vis[sx][sy][sz]=true;
while (!q.empty())
{
int nx=q.front().x,ny=q.front().y,nz=q.front().z,nstep=q.front().step;
q.pop();
if (nx==fx && ny==fy && nz==fz)
{
cout << "Escaped in " << nstep << " minute(s).";
return;
}
for (int i=1;i<=6;i++)
{
int xx=nx+dx[i],yy=ny+dy[i],zz=nz+dz[i];
if (xx>=1 && xx<=a && yy>=1 && yy<=b && zz>=1 && zz<=c && vis[xx][yy][zz]==0 && m[xx][yy][zz]!='#')
{
vis[xx][yy][zz]=1;
q.push(node{xx,yy,zz,nstep+1});
}
}
}
cout << "Trapped!";
return;
}
int main()
{
cin >> a >> b >> c;
for (int i=1;i<=a;i++)
{
for (int j=1;j<=b;j++)
{
for (int k=1;k<=c;k++)
{
cin >> m[i][j][k];
if (m[i][j][k]=='S')
sx=i,sy=j,sz=k;
if (m[i][j][k]=='E')
fx=i,fy=j,fz=k;
}
}
}
bfs();
return 0;
}
这里空空如也
有帮助,赞一个