NYOJ 353 3D dungeon 【bfs】

题意:给你一个高L长R宽C的图形。每个坐标都能够视为一个方格。你一次能够向上。下。左,右,前,后任一方向移动一个方格, 可是不能向有#标记的方格移动。

问:从S出发能不能到达E,假设能请输出最少的移动次数。

策略:简单的深搜。

注意:由于是求最少的移动次数。所以要从全部能到达的中选出最少的。

代码:

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
char map[35][35][35];
int ans, l, r, c;
const int dirx[6] = {1, -1, 0, 0, 0, 0};
const int diry[6] = {0, 0, 1, -1, 0, 0};
const int dirz[6] = {0, 0, 0, 0, 1, -1};
struct node{
	int x, y, z;
	int step;
};
node st, en;
queue<node > q;
char s[10000];
bool vis[35][35][35];

int limit(node s){
	return (s.x<l&&s.x>=0&&s.y>=0&&s.y<r&&s.z>=0&&s.z<c&&map[s.x][s.y][s.z] != '#');
}

int match(node s){
	if(s.x==en.x&&s.y==en.y&&s.z==en.z) return 1;
	else return 0;
}
void bfs(){
	memset(vis, 0, sizeof(vis));
	ans = INF;  //初始化最大
	int i;
	q.push(st);
	//map[st.x][st.y][st.z] = '#';
	vis[st.x][st.y][st.z] = 1;
	while(!q.empty()){
		node temp = q.front();

		for(i = 0; i < 6; i ++){
			node temp2;
			temp2.x = temp.x+dirx[i];
			temp2.y = temp.y+diry[i];
			temp2.z = temp.z+dirz[i];
			temp2.step = temp.step+1;
			//printf("%d %d %d %d..", temp2.x, temp2.y, temp2.z, temp2.step);
			if(limit(temp2)&&!vis[temp2.x][temp2.y][temp2.z]){
				if(match(temp2)){
					ans = ans<temp2.step?

ans:temp2.step;  //要bfs完所有的
				}
				else{
					q.push(temp2);
					vis[temp2.x][temp2.y][temp2.z] = 1;
				}
			}
		}
	//	if(ans) break;
		q.pop();
	}
	if(ans == INF) printf("Trapped!\n");
	else printf("Escaped in %d minute(s).\n", ans);
}
int main(){
	int i, j, k;
	while(scanf("%d%d%d", &l, &r, &c), l||r||c){
		memset(map, 0, sizeof(map));
		for(i = 0; i < l; i ++){
			for(j = 0; j < r; j ++){
				scanf("%s", map[i][j]);
				for(k = 0; k <c; k ++){
					if(map[i][j][k] == 'S'){
						st.x = i; st.y = j; st.z = k; st.step = 0;
					}
					if(map[i][j][k] == 'E'){
						en.x =i; en.y = j; en.z = k; en.step = 0;
					}
				}
			}
			gets(s);
		}
		bfs();

	}
	return 0;
}
时间: 2024-10-16 04:39:59

NYOJ 353 3D dungeon 【bfs】的相关文章

NYOJ353 3D dungeon 【BFS】

3D dungeon 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south

NYOJ 284 坦克大战 【BFS】+【优先队列】

坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" in our childhood, and some people (like me) even often play it on computer now. What we are discussing is a simple edition of this game. Given a map that co

NYOJ 58 最少步数 【BFS】

题意:不解释. 策略:如题: 这道题可以用深搜也可以用广搜,我以前写的是用的深搜,最近在学广搜,就拿这道题来练练手. 代码: #include<stdio.h> #include<string.h> #include<queue> using std::queue; bool vis[20][20]; const int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};//方向 int map[9][9] = { 1,1,1,1,1,1,1

nyoj 353 3D dungeon

3D dungeon 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south

nyoj 284 坦克大战【bfs】

坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" in our childhood, and some people (like me) even often play it on computer now. What we are discussing is a simple edition of this game. Given a map that co

nyoj 523 亡命逃窜 【BFS】

亡命逃窜 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧.不过英雄不是这么好当的.这个可怜的娃被魔王抓住了,倍受折磨,生死一线.有一天魔王出去约会了,这可是一个千载难逢的逃命机会.你现在的任务就是判断一下这个英雄未遂的孩子能不能在魔王回来之前逃出魔王的城堡,成功逃生,最后迎娶我们美丽的公主. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始hck被关在(0,

NYOJ 58 步数最少 【BFS】

意甲冠军:不解释. 策略:如果: 这个问题也可以用深宽搜索搜索中使用.我曾经写过,使用深层搜索.最近的学校范围内的搜索,拿这个问题来试试你的手. 代码: #include<stdio.h> #include<string.h> #include<queue> using std::queue; bool vis[20][20]; const int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};//方向 int map[9][9] = {

nyoj 92 图片实用面积【bfs】

图像实用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 "ACKing"同学曾经做一个图像处理的项目时.遇到了一个问题,他须要摘取出图片中某个黑色线圏成的区域以内的图片,如今请你来帮助他完毕第一步.把黑色线圏外的区域所有变为黑色.       图1                                                        图2 已知黑线各处不会出现交叉(如图2),而且.除了黑线上的点外,图像中没有纯黑色(即像素

HDU 1253 胜利大逃亡 NYOJ 523【BFS】

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24608    Accepted Submission(s): 9427 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的