kuangbin.地牢大师(简单搜索)

题不难,因为到现在还没设计过几次很长的代码,所以找bug才是最难得,多写了一个等于=,找了半天。

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;

struct zuo{
	int x;
	int y;
	int z;
};
vector<vector<vector<char>>> arr;
queue<zuo> que;
int l,r,c;
int st[110][110][110];
zuo fx[7]={{0,0,0},{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};

void bfs(){
	bool isc=false;
	while(!que.empty()){
		auto t=que.front();
		que.pop();
		for(int i=1;i<=6;i++){
			int a=t.x+fx[i].x;
			int b=t.y+fx[i].y;
			int d=t.z+fx[i].z;
			if((a>0&&a<=l)&&(b>0&&b<=r)&&(d>0&&d<=c)&&arr[a][b][d]!='#'){
				que.push({a,b,d});
				st[a][b][d]=st[t.x][t.y][t.z]+1;
				if(arr[a][b][d]=='E'){
					isc=true;
					cout<<"Escaped in "<<st[a][b][d]<<" minute(s).\n";
					break;
				}
				arr[a][b][d]='#';
			}
		}
		if(isc){
			break;
		}
	}
	if(!isc){
		cout<<"Trapped!\n";
	}
	return ;
}

int main(){
	cin>>l>>r>>c;
	while(l!=0){
		arr.resize(l+1);
		for(int i=1;i<=l;i++){
			arr[i].resize(r+1);
			for(int j=1;j<=r;j++){
				arr[i][j].resize(c+1);
			}
		}
		for(int i=1;i<=l;i++){
			for(int j=1;j<=r;j++){
				for(int k=1;k<=c;k++){
					cin>>arr[i][j][k];
					if(arr[i][j][k]=='S'){
						que.push({i,j,k});
						arr[i][j][k]=='#';
					}
				}
			}
		}
		bfs();
		while(!que.empty()){
			que.pop();
		}
		arr.clear();
		memset(st,0,sizeof(st));
		cin>>l>>r>>c;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值