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 ...
随机推荐
- [Oracle19C ASM管理] ASM的网络服务
启用了ASM集群以后,网络管理放给了grid用户.grid用户的$ORACLE_HOME/network/admin有网络配置文件,而oracle用户下的网络配置文件则不存在了. [grid@cent ...
- unity GetComponent在android端获取对象错误
PlayerObj pobj = go.GetComponent<PlayerObj>(); if (pobj && pobj.IsMyTeam()) { marchAct ...
- python测试IP地址是否ping通
import timeimport osdef pingComputer(): for i in range(1, 256): host = '192.168.2.' + str(i) status1 ...
- ajax thisisunsafe
ajax 从chrome发出,对方公钥证书不是符合要求CA签发的,则会ssl握手失败,也没有机会强制信任 比如:http代理服务器(三)fiddler[重点] 当然应该可以从ajax指定信任一切服务端 ...
- Respecting causality is all you need for training physics-informed neural networks
未发表 本篇工作时关于连续时间的PDE.也是从因果关系的角度入手,最近看过几篇该作者的工作.(简而言之就是从初始条件方向开始训练) 目前的PINN框架缺乏尊重物理系统演化所固有的时空因果结构.因此,作 ...
- Web前端单词大全
style 修饰width 宽度height 高度title 想说明的text-align 水平对齐方式center 居中 left 居左 right 居右line-height 垂直对齐方式/行高 ...
- javaScript 获取对象数组的对象里面想要的属性,返回一个新的数组
// obj 数组 或者 对象 // arr 要获取对象数组的对象的key数组 // addProperty 可以往对象数组的每一个对象添加一个新的属性 reducedFilter(obj, arr, ...
- python学习笔记-初始python(1)
1.运行程序 python 使用cmd.exe 运行程序. 例子: python +[文件路径] 2.注释 当行注释:# 被注释内容 多行注释:'''被注释内容''',或者""& ...
- 实时中文语音克隆——开源项目MockingBird体验
[引子] 在今年大型网络攻防演练前不久,笔者接到一个公司的座机号码来电,上来就问防守准备得怎么样了,哪里还有不足等.等等,这声音不认识,笔者第一反应就是蓝军(Red Team)来进行社会工程攻击,于是 ...
- Windows D3D渲染到纹理
D3D渲染到纹理 1 #include <d3dx9.h> 2 3 //---------------------------------------------------------- ...