听灌多,求调(玄关
  • 板块灌水区
  • 楼主_cyh0412_
  • 当前回复7
  • 已保存回复12
  • 发布时间2024/7/27 14:47
  • 上次更新2024/7/27 15:56:21
查看原帖
听灌多,求调(玄关
731644
_cyh0412_楼主2024/7/27 14:47

题面

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int MAXN = 500;
const int dx[]={1,0,-1,0,0,0};
const int dy[]={0,1,0,-1,0,0};
const int dz[]={0,0,0,0,-1,1};

struct P
{
	int x,y,z;
};

int x,y,z,ax,ay,az,bx,by,bz,dis[MAXN][MAXN][MAXN],ans;
bool g[MAXN][MAXN][MAXN],st[MAXN][MAXN][MAXN];

int bfs(int x,int y,int z)
{
	queue<P> q;
	q.push({ax,ay,az}),st[ax][ay][az]=1,dis[ax][ay][az]=1;
	while (q.size())
	{
		P tmp=q.front();
		q.pop();
		if (tmp.x==bx&&tmp.y==by&&tmp.z==bz) return dis[tmp.x][tmp.y][tmp.z];
		for (int i=0;i<6;i++)
		{
			int xx=tmp.x+dx[i],yy=tmp.y+dy[i],zz=tmp.z+dz[i];
			if (xx<1||xx>::x||yy<1||yy>::y||zz<1||zz>::z||st[xx][yy][zz]||!g[xx][yy][zz]) continue;
			q.push({xx,yy,zz});
			st[xx][yy][zz]=1;
			dis[xx][yy][zz]=dis[tmp.x][tmp.y][tmp.z]+1;
		}
	}
	return -1;
}

int main()
{
	//freopen("Input.txt","r",stdin);
	//freopen("Output.txt","w",stdout);
	while (cin>>z>>x>>y)
	{
		if (!x&&!y&&!z) break;
		for (int i=1;i<=z;i++)
			for (int j=1;j<=x;j++)
				for (int k=1;k<=y;k++)
				{
					char c;
					cin>>c;
					if (c=='#') g[i][j][k]=1;
					else if (c=='S') az=i,ax=j,ay=k;
					else if (c=='E') bz=i,bx=j,by=k;
				}
		ans=bfs(ax,ay,az);
		if (ans!=-1) printf("Escaped in %d minute(s).\n",ans);
		else cout<<"Trapped!"<<endl;
	}
	return 0;
}
2024/7/27 14:47
加载中...