NOI-1253:Dungeon Master(BFS)
描述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, east, west, up or down. You cannot move diagonally and the maze is surrounded by solid rock on all sides.
Is an escape possible? If yes, how long will it take?
输入
The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).
L is the number of levels making up the dungeon.
R and C are the number of rows and columns making up the plan of each level.
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.
输出
Each maze generates one line of output. If it is possible to reach the exit, print a line of the form
Escaped in x minute(s).
where x is replaced by the shortest time it takes to escape.
If it is not possible to escape, print the line
Trapped!
样例输入
3 4 5
S....
.###.
.##..
###.# #####
#####
##.##
##... #####
#####
#.###
####E 1 3 3
S##
#E#
### 0 0 0
样例输出
Escaped in 11 minute(s).
Trapped!
题目大意:在3d迷宫内某一层的一点起步,中间变换楼层,躲避障碍,最终能否走到终点,如果能,输出最少步数。
#include<iostream>
#include<map>
#include<queue>
#include<cstring>
#include<vector>
using namespace std;
int l,r,c,u_d,el;
int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
struct L
{
char M[35][35]; }L[35];
typedef struct Node
{
int x,y,l,step;
} Node;
int BFS(int x,int y,int l0)
{
queue<Node>Q;
Node t,temp;
t.x=x;
t.y=y;
t.l=l0;
t.step=0;
Q.push(t);
while(!Q.empty())
{
t=Q.front();
Q.pop();
if(t.x<0||t.x>=r||t.y<0||t.y>=c||L[t.l].M[t.x][t.y]=='#')
continue;
if(L[t.l].M[t.x][t.y]=='E')return t.step;//找到出口
L[t.l].M[t.x][t.y]='#';
if(t.l<l-1&&L[t.l+1].M[t.x][t.y]!='#')//能够前往迷宫下层
{
temp=t;
temp.l=t.l+1;
temp.step=t.step+1;
Q.push(temp);
}
if(t.l>0&&L[t.l-1].M[t.x][t.y]!='#')//能够前往迷宫上层
{
temp=t;
temp.l=t.l-1;
temp.step=t.step+1;
Q.push(temp);
}
for(int i=0;i<4;i++)//迷宫内左右移动
{
temp=t;
temp.x=t.x+xx[i];
temp.y=t.y+yy[i];
temp.step=t.step+1;
Q.push(temp);
}
}
return -1;
} int main()
{
int x0,y0,l0;
while(cin>>l>>r>>c&&l!=0&&r!=0&&c!=0)
{
for(int i=0;i<l;i++)
{
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
{
cin>>L[i].M[j][k];
if(L[i].M[j][k]=='S'){x0=j;y0=k;l0=i;}
else if(L[i].M[j][k]=='E'){el=i;}
} }
int t=(BFS(x0,y0,l0));
if(t==-1)cout<<"Trapped!"<<endl;
else cout<<"Escaped in "<<t<<" minute(s)."<<endl;
} return 0;
}
NOI-1253:Dungeon Master(BFS)的更多相关文章
- hdu 2251 Dungeon Master bfs
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17555 Accepted: 6835 D ...
- POJ2251 Dungeon Master —— BFS
题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 1253 Dungeon Master
题目链接: http://noi.openjudge.cn/ch0205/1253/ http://poj.org/problem?id=2251 总时间限制: 1000ms 内存限制: 65536 ...
- Dungeon Master bfs
time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...
- poj 2251 Dungeon Master (BFS 三维)
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- [poj] Dungeon Master bfs
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- poj 2251 Dungeon Master( bfs )
题目:http://poj.org/problem?id=2251 简单三维 bfs不解释, 1A, 上代码 #include <iostream> #include<cst ...
- POJ 2251 Dungeon Master (BFS最短路)
三维空间里BFS最短路 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- POJ2251 Dungeon Master(bfs)
题目链接. 题目大意: 三维迷宫,搜索从s到e的最小步骤数. 分析: #include <iostream> #include <cstdio> #include <cs ...
- POJ 2251 Dungeon Master bfs 难度:0
http://poj.org/problem?id=2251 bfs,把两维换成三维,但是30*30*30=9e3的空间时间复杂度仍然足以承受 #include <cstdio> #inc ...
随机推荐
- CAD怎么删除图块注释?删除CAD图块注释步骤
CAD设计过程中,有时候会在图纸中添加许多注释,如:文字注释,图块注释,标注样式注释等.当需要删除图纸中的CAD图块注释时,你知道该如何操作吗?本节课程小编就来给大家分享一下浩辰CAD软件中删除CAD ...
- 删除v-for方法生成的组件的方法
一.思路 在vue:data中的数据对象添加布尔类型的属性,用来表明其是否被渲染,如果需要删除组件,就把这个属性设置为false: 在计算属性vue:computed中,根据该布尔属性过滤,生成一个新 ...
- PNAS:微生物组分析揭示人类皮肤的独特性
https://blog.csdn.net/woodcorpse/article/details/87989663
- 封装ESXi网卡驱动
只能使用 Windows 7 系统 只能使用 Windows 7 系统 只能使用 Windows 7 系统 OK,留下的继续吧,
- Java语言出现的背景、影响及应用前景分析
一.背景 1991年 ,SUN MicroSystem公司的 Jame Gosling. Bill Joe等人 ,为在电视.控制烤面包箱等家用消费类电子产品上进行交互式操作而开发了一个名为Oak的软件 ...
- laravel 表单提交 图片的异步上传
这里使用的是WebUploader 百度提供的插件 首先下载最新的包 下载第一个,解压,把解压好的文件放入public目录下 视图层中 <div class="formContro ...
- Django 之 ORM1
1.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- (jmeter笔记)jmeter打印日志
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.l ...
- pytorch学习笔记(5)--神经网络
(一)神经网络的骨架 nn.Module import torch from torch import nn class Tudui(nn.Module): def __init__(self): s ...
- Windows MFC HTTP 函数流程
Windows MFC HTTP 函数流程 1 //建立连接 2 pInternetSession = new CInternetSession(AfxGetAppName()); 3 4 5 6 / ...