20分求助
查看原帖
20分求助
235431
lalalahahaha楼主2023/10/20 19:26
#include<bits/stdc++.h>
using namespace std;

int ch,k,g;
int a[35][35][35];
char c[35][35][35];
string s;

void dfs(int h,int i,int j){
	//printf("qh=%d qi=%d qj=%d\n",h,i,j);
	
	if(h>1&&c[h-1][i][j]!='#'&&(a[h][i][j]+1<a[h-1][i][j])){
		a[h-1][i][j]=a[h][i][j]+1;
		dfs(h-1,i,j);
	}
	if(h<g&&c[h+1][i][j]!='#'&&(a[h][i][j]+1<a[h+1][i][j])){
		a[h+1][i][j]=a[h][i][j]+1;
		dfs(h+1,i,j);
	}
	if(i>1&&c[h][i-1][j]!='#'&&(a[h][i][j]+1<a[h][i-1][j])){
		a[h][i-1][j]=a[h][i][j]+1;
		dfs(h,i-1,j);
	}
	if(i<ch&&c[h][i+1][j]!='#'&&(a[h][i][j]+1<a[h][i+1][j])){
		a[h][i+1][j]=a[h][i][j]+1;
		dfs(h,i+1,j);
	}
	if(j>1&&c[h][i][j-1]!='#'&&(a[h][i][j]+1<a[h][i][j-1])){
		a[h][i][j-1]=a[h][i][j]+1;
		dfs(h,i,j-1);
	}
	if(j<k&&c[h][i][j+1]!='#'&&(a[h][i][j]+1<a[h][i][j+1])){
		a[h][i][j+1]=a[h][i][j]+1;
		dfs(h,i,j+1);
	}
	
}

int main()
{
	int qh,qi,qj,zh,zi,zj;
	cin>>g>>ch>>k;
	memset(a,0x3f,sizeof(a));
	for(int h=1;h<=g;h++){
		for(int i=1;i<=ch;i++){
			cin>>s;
			for(int j=1;j<=k;j++){
				c[h][i][j]=s[j-1];
				if(c[h][i][j]=='S'){
					qh=h;qi=i;qj=j;
				}
				if(c[h][i][j]=='E'){
					zh=h;zi=i;zj=j;
				}
			}
		}
	}
	a[qh][qi][qj]=0;
	dfs(qh,qi,qj);
	if(a[zh][zi][zj]<=(30*30*30))
	printf("Escaped in %d minute(s)\n",a[zh][zi][zj]);
	else printf("Trapped!\n");
	return 0;
}
2023/10/20 19:26
加载中...