TLE求助!!!QWQ
查看原帖
TLE求助!!!QWQ
558686
KinoTsuki楼主2022/10/10 20:34

提交记录

#include<stdio.h>
#include<queue>
using namespace std;

const int N =105;
char a[N][N][N];
bool b[N][N][N];
const int nx[6]={1,-1,0,0,0,0};//三个方向数组
const int ny[6]={0,0,1,-1,0,0};
const int nz[6]={0,0,0,0,1,-1};
struct node {
	int x,y,z,stp;
};
queue<node> Q;
int m,n,k,ex,ey,ez;//m,n,k是边界,i,j,h是对应的循环变量
int main() {
	ZSB:scanf("%d%d%d",&m,&n,&k);
	while(!Q.empty()) Q.pop();
	if(m==0) return 0;//程序结束
	for(int i=0;i<m;i++) {
		for(int j=0;j<n;j++) {
			scanf("%s",a[i][j]);
			for(int h=0;h<k;h++) {
				if(a[i][j][h]=='S') {
					Q.push({i,j,h,0});//插入起始点
				}
				if(a[i][j][h]=='E') {
					ex=i;ey=j;ez=h;
				}
			}
		}
	}
	while(!Q.empty()) {
		int x=Q.front().x , y=Q.front().y , z=Q.front().z , stp=Q.front().stp;Q.pop();
		if(x==ex&&y==ey&&z==ez) {
			printf("Escaped in %d minute(s).\n",stp);
			goto ZSB;//回到输入
		}
		b[x][y][z]=true;
		for(int pos=0;pos<6;pos++) {//6个方向
			int tx=x+nx[pos] , ty=y+ny[pos] , tz=z+nz[pos];
			if(tx<0||ty<0||tz<0||tx>=m||ty>=n||tz>=k||b[tx][ty][tz]||a[tx][ty][tz]=='#') continue;//不越界,无障碍,没走过
			Q.push({tx,ty,tz,stp+1});
		}
	}
	puts("Trapped!");
	goto ZSB;//回到输入
}
2022/10/10 20:34
加载中...