80分!第三个点TLE
查看原帖
80分!第三个点TLE
1033544
pjr_freopen楼主2024/8/1 22:56
#include<iostream>
#include<algorithm>
using namespace std;
inline int in(){int x=1,y=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')x=-1;ch=getchar();}while(ch>='0'&&ch<='9'){y=y*10+ch-'0';ch=getchar();}return x*y;}inline void out(int n){if(n<0)putchar('-'),n*=-1;if(n>9)out(n/10);putchar (n%10+'0');}
char a[35][35][35];
int ans=1<<30,g,c,k;
bool bo=0,vis[35][35][35];
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,-1,1};
int minn(int a,int b){
	return a<b?a:b;
}
int check(int x,int y,int z){
	return x<=c&&x>0&&y<=k&&y>0&&z<=g&&z>0&&a[z][x][y]!='#';
}
void dfs(int x,int y,int z,int id){
	if(vis[z][x][y])return;
	if(a[z][x][y]=='E'){
		ans=minn(id,ans);
		bo=1;
		return;
	}
	for(int i=0;i<6;++i){
		int nx=x+dx[i];
		int ny=y+dy[i];
		int nz=z+dz[i];
		if(check(nx,ny,nz)){
			vis[z][x][y]=1;
			dfs(nx,ny,nz,id+1);
			vis[z][x][y]=0;
		}
	}
}
int main(){
	g=in(),c=in(),k=in();
	for(int i=1;i<=g;++i){
		for(int j=1;j<=c;++j){
			scanf("%s",(a[i][j]+1));
		}
	}
	int xg,xc,xk;
	for(int i=1;i<=g;++i){
		for(int j=1;j<=c;++j){
			for(int f=1;f<=k;++f){
				if(a[i][j][f]=='S'){
					xg=i;
					xc=j;
					xk=f;
				}
			}
		}
	}
	dfs(xc,xk,xg,0);
	if(bo){
		printf("Escaped in %d minute(s).",ans);
	}
	else{
		printf("Trapped!");
	}
	return 0;
}

2024/8/1 22:56
加载中...