样例过。#1是Trapped!过了。剩下WA
查看原帖
样例过。#1是Trapped!过了。剩下WA
733515
LikablePie79015楼主2023/4/7 22:48
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
using namespace std;

int L, R, C;
int SX, SY, SZ, FX, FY, FZ;
int dx[6] = {1, -1, 0, 0, 0, 0};
int dy[6] = {0, 0, 1, -1, 0, 0};
int dz[6] = {0, 0, 0, 0, 1, -1};
int cx, cy, cz;
char a[40][40][40];
int vis[40][40][40];
queue <int> qx, qy, qz;

int main(){
	memset(vis, -1, sizeof(vis));
	scanf("%d%d%d", &L, &R, &C);
	for(int i = 0; i < L; i++){
		for(int j = 0; j < R; j++){
			for(int k = 0; k < C; k++){
				cin >> a[i][j][k];
				if(a[i][j][k] == 'S'){
					SX = i, SY = j, SZ = k;
				}
				if(a[i][j][k] == 'E'){
					FX = i, FY = j, FZ = k;
				}
			}
		}
	}
	
	vis[SX][SY][SZ] = 0;
	qx.push(SX), qy.push(SY), qz.push(SZ);
	while(!qx.empty()){
		for(int i = 0; i < 6; i++){
			cx = qx.front() + dx[i];
			cy = qy.front() + dy[i];
			cz = qz.front() + dz[i];
			if(cx >= 0 && cx < L && cy >= 0 && cy < R && cz >= 0 && cz < C && vis[cx][cy][cz] == -1 && a[cx][cy][cz] != '#'){
				vis[cx][cy][cz] = vis[qx.front()][qy.front()][qz.front()] + 1;
				qx.push(cx), qy.push(cy), qz.push(cz);   
			}
		}
		qx.pop(), qy.pop(), qz.pop();
	}
	
//	for(int i = 0; i < L; i++){
//		for(int j = 0; j < R; j++){
//			for(int k = 0; k < C; k++){
//				printf("%3d", vis[i][j][k]);
//			}
//			cout << endl;
//		}
//		cout << endl;
//	}

	if(vis[FX][FY][FZ] == -1){
		printf("Trapped!");
	}else{
		printf("Escaped in %d minute(s)", vis[FX][FY][FZ]);
	}
	return 0;
} 
2023/4/7 22:48
加载中...