请求大佬支援!!!
  • 板块灌水区
  • 楼主A1001a1001
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/11 16:45
  • 上次更新2024/7/11 17:26:19
查看原帖
请求大佬支援!!!
1226726
A1001a1001楼主2024/7/11 16:45

【题目描述】 这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。可以上下左右前后移动,每次都只能移到相邻的空位,每次需要花费一分钟,求从起点到终点最少要多久。

【输入】 多组测试数据。

一组测试测试数据表示一个三维迷宫:

前三个数,分别表示层数、一个面的长和宽,后面是每层的平面图。前三个数据为三个零表示结束。

【输出】 最小移动次数。

【输入样例】 3 4 5 S.... .###. .##.. ###.#

##.## ##...

#.### ####E 1 3 3 S## #E#

0 0 0 【输出样例】 Escaped in 11 minute(s). Trapped!

#include<bits/stdc++.h>
using namespace std;
struct loc{
	int x,y,z;
	int cnt;
}loc_st,loc_end,loc_now,loc_next;
queue<loc> q;
int l,r,c;
int dx[10] = {-1,1,0,0,0,0},dy[10] = {0,0,-1,1,0,0},dz[10] = {0,0,0,0,-1,1};
char a[55][55][55];
int bfs(){
	while(!q.empty()) q.pop();
	loc_st.cnt =0;
	q.push(loc_st);
	while(!q.empty()){
		loc_now = q.front();
		q.pop();
//		cout<<loc_now.x<<" "<<loc_now.y<<" "<<loc_now.z<<endl;
//		if(loc_now.x  == loc_end.x &&loc_now.y  == loc_end.y  && loc_now.z == loc_end.z ){
//			retunr loc_now.cnt;
//		}
		for(int i=0;i < 6;i++){
			loc_next.x  = loc_now.x +dx[i];
			loc_next.y  = loc_now.y +dy[i];
			loc_next.z  = loc_now.z +dz[i];
			loc_next.cnt=loc_now.cnt+1;
			if(loc_next.x <1 || loc_next.x > l)	continue;
			if(loc_next.y <1 || loc_next.y > r)	continue;
			if(loc_next.z <1 || loc_next.x > c)	continue;
			if(loc_next.x  == loc_end.x &&loc_next.y  == loc_end.y  && loc_next.z == loc_end.z ){
			    return loc_next.cnt  ;
		    }
			if(a[loc_next.x ][loc_next.y ][loc_next.z ] == '.'){
				q.push(loc_next);
				a[loc_next.x ][loc_next.y ][loc_next.z ] ='#';
			}
		}
	}
	return -1;
}
int main(){
	for(;;){
		cin>>l>>r>>c;
		if(l == 0 && r == 0 && c == 0) break;
		for(int i=1;i <= l;i++){
		for(int j=1;j <= r;j++){
			for(int k=1;k <= c;k++){
				cin>>a[i][j][k];
				if(a[i][j][k] == 'S'){
					loc_st.x  = i;
					loc_st.y  = j;
					loc_st.z  = k;
				}else if(a[i][j][k] == 'E'){
					loc_end.x = i;
					loc_end.y = j;
					loc_end.z = k;
				}
			}
		}
		
	}int t = bfs();
		if(t == -1) cout<<"Trapped!"<<endl;
		else cout<<"Escaped in " <<t<<" minute(s)."<<endl;//Escaped in 11 minute(s).
	}
	
	return 0;
} 

为什么只得四十分!!!(信奥一本通1248) 求助

2024/7/11 16:45
加载中...