宽搜TLE求助,样例能过
查看原帖
宽搜TLE求助,样例能过
602968
Wangziruican楼主2024/10/20 15:50
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int l,r,c,bl,br,bc,el,er,ec;
char a[32][32][32]={0},s;
//int b[32][32][32];
struct node{
	int dd,xx,yy;
	long long time;
};
queue <node> Q;
int main(){
	while(scanf("%d",&l)){
		scanf("%d %d",&r,&c);
		if(l==0&&r==0&&c==0){
			break;
		}
		for(int i=1;i<=l;i++){
			for(int j=1;j<=r;j++){
//				scanf("%s",a[i][j]);
				for(int k=1;k<=c;k++){
					do scanf("%c",a[i][j]+k);
					while(a[i][j][k]=='\n');
//					cin>>a[i][j][k];
					if(a[i][j][k]=='S'){
						bl=i,br=j,bc=k;	
					}
					if(a[i][j][k]=='E'){
						el=i,er=j,ec=k;
					}
				}
			}
		}
		node m;
		m.dd=bl,m.xx=br,m.yy=bc,m.time=0;
		Q.push(m);
		bool flag=1;
		while(!Q.empty()){
			int d=Q.front().dd,x=Q.front().xx,y=Q.front().yy;
			long long t=Q.front().time;
			a[d][x][y]='#';
			Q.pop();
			if(d==el&&x==er&&y==ec){
				printf("Escaped in %d minute(s).",t);
				flag=0;
				break;
			}
			if(a[d][x-1][y]!='#'&&x-1>=1){//向上 
				node m;
				m.dd=d,m.xx=x-1,m.yy=y,m.time=t+1;
				Q.push(m);
			}
			if(a[d][x+1][y]!='#'&&x+1<=r){//向下 
				node m;
				m.dd=d,m.xx=x+1,m.yy=y,m.time=t+1;
				Q.push(m);
			}
			if(a[d][x][y-1]!='#'&&y-1>=1){//向左 
				node m;
				m.dd=d,m.xx=x,m.yy=y-1,m.time=t+1;
				Q.push(m);
			}
			if(a[d][x][y+1]!='#'&&y+1<=c){//向右 
				node m;
				m.dd=d,m.xx=x,m.yy=y+1,m.time=t+1;
				Q.push(m);
			}
			if(a[d+1][x][y]!='#'&&d+1<=l){//向上一层 
				node m;
				m.dd=d+1,m.xx=x,m.yy=y,m.time=t+1;
				Q.push(m);
			}
			if(a[d-1][x][y]!='#'&&d-1>=1){//向下一层 
				node m;
				m.dd=d-1,m.xx=x,m.yy=y,m.time=t+1;
				Q.push(m);
			}
		}
		if(flag){
			printf("Trapped!");
		}
	}
	return 0;
}
2024/10/20 15:50
加载中...