求助一道站外题
  • 板块学术版
  • 楼主kong_xin_qi
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/8/13 12:02
  • 上次更新2023/11/4 10:49:29
查看原帖
求助一道站外题
239243
kong_xin_qi楼主2021/8/13 12:02

rt

#include <iostream>
using namespace std;
int dx[6]={1,-1,0,0,0,0}, dy[6]={0,0,1,-1,0,0}, dz[6]={0,0,0,0,1,-1};
bool vis[101][101][101];
int h[100001][11];
char s[101][101][101];
int x, y, z, i2, j2, k2;
bool pan=true;
void bfs(int xx, int yy, int zz)
{
	int head=1, tail=1;
	vis[xx][yy][zz]=1;
	h[1][1]=xx, h[1][2]=yy, h[1][3]=zz, h[1][4]=0;
	while(head<=tail)
	{ 
		for(int i=0;i<=5;i++)
		{
			int nx=xx+dx[i], ny=yy+dy[i], nz=zz+dz[i];
			if(nx>=0&&nx<x&&ny>=0&&ny<y&&nz>=0&&nz<z&&vis[nz][nx][ny]!=1)
			{
				vis[nz][nx][ny]=1;
				tail++;
				h[tail][1]=nx, h[tail][2]=ny, h[tail][3]=nz;
				h[tail][4]=h[head][4]+1;
				if(nz==i2&&nx==j2&&ny==k2)
				{
					cout<<"Escaped in "<<h[tail][4]<<" minute(s)."<<endl;
					pan=false;
					return; 
				}
			}
		}
		head++;
		xx=h[head][1], yy=h[head][2], zz=h[head][3];
	}
}
int main()
{
	int i1, j1, k1;
	while(cin>>z>>x>>y)
	{
		pan=true;
		if(x==0&&y==0&&z==0)
			break;
		for(int i=0;i<z;i++)
			for(int j=0;j<x;j++)
				for(int k=0;k<y;k++)
				{
					cin>>s[i][j][k];
					if(s[i][j][k]=='#')
						vis[i][j][k]=1;
					else	
						if(s[i][j][k]=='S')
							i1=i, j1=j, k1=k;
						else if(s[i][j][k]=='E')
							i2=i, j2=j, k2=k;
				}
		bfs(j1,k1,i1);
		if(pan==true)
			cout<<"Trapped!"<<endl;
	}	
	return 0;
} 

萌新初学BFS,大佬帮忙看下哪里有问题

2021/8/13 12:02
加载中...