Dungeon Master

Description

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? 

Input

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.

Output

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!

Sample Input

3 4 5
S....
.###.
.##..
###.# #####
#####
##.##
##... #####
#####
#.###
####E 1 3 3
S##
#E#
### 0 0 0

Sample Output

Escaped in 11 minute(s).
Trapped!

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<cstring> using namespace std;
const int inf=-1;
struct TP
{
int h,x,y;
TP(int h, int x, int y):h(h), x(x), y(y) {}
};
int sh,sx,sy,gh,gx,gy;
char a[100][100][100];
int m=0,n=0,h=0;
int d[100][100][100];
int dh[6]= {0,0,0,0,1,-1},dx[6]= {1,0,-1,0,0,0},dy[6]= {0,1,0,-1,0,0};
int dfs()
{
queue<TP> que;
for(int k=0; k<h; k++)
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
d[k][i][j]=inf;//初始化所有距离标记
que.push(TP(sh,sx,sy));//把开始加入队列
d[sh][sx][sy]=0;//重新定义开头的距离
while(!que.empty())//队列的循环
{ TP p = que.front();//使用队列的开头
que.pop();//踢出
if(p.h==gh&&p.x==gx&&p.y==gy) break;//判断是否是结尾
for(int i=0; i<6; i++)//移动
{
int nx=p.x+dx[i],ny=p.y+dy[i],nh=p.h+dh[i];
if(0 <= nh && 0 <= nx && 0 <= ny && nx < n && ny < m&& nh < h && a[nh][nx][ny]!='#'&&d[nh][nx][ny]==inf)//判断是否是边界以及栅栏
{
que.push(TP(nh,nx,ny));//把移动后的加入队列
d[nh][nx][ny]=d[p.h][p.x][p.y]+1;
}
}
}
return d[gh][gx][gy];
}
int main()
{
while(scanf("%d%d%d",&h,&n,&m)!=-1)
{
if(h==0&&n==0&&m==0)
return 0;
getchar();
for(int k=0; k<h; k++)
{
for(int i=0; i<n; i++)//
{
scanf("%s",&a[k][i]);
for(int j=0; j<m; j++)
if(a[k][i][j]=='S')
sh=k,sx=i,sy=j;
else if(a[k][i][j]=='E')
gh=k,gx=i,gy=j;
}
getchar();
}
int ans=dfs();
if(ans!=-1)
printf("Escaped in %d minute(s).\n",ans);
else
printf("Trapped!\n"); }
return 0;
}

Dungeon Master(逃脱大师)-BFS的更多相关文章

  1. POJ.2251 Dungeon Master (三维BFS)

    POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...

  2. POJ 2251 Dungeon Master【三维BFS模板】

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45743 Accepted: 17256 Desc ...

  3. poj 2251 Dungeon Master 3维bfs(水水)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21230   Accepted: 8261 D ...

  4. Dungeon Master(三维bfs)

    题目链接:http://poj.org/problem?id=2251 题目: Description You are trapped in a 3D dungeon and need to find ...

  5. Dungeon Master (三维bfs)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  6. POJ 2252 Dungeon Master 三维水bfs

    题目: http://poj.org/problem?id=2251 #include <stdio.h> #include <string.h> #include <q ...

  7. ZOJ 1940 Dungeon Master【三维BFS】

    <题目链接> 题目大意: 在一个立体迷宫中,问你从起点走到终点的最少步数. 解题分析: 与普通的BFS基本类似,只需要给数组多加一维,并且走的时候多加 上.下这两个方向就行. #inclu ...

  8. Dungeon Master POJ - 2251(bfs)

    对于3维的,可以用结构体来储存,详细见下列代码. 样例可以过,不过能不能ac还不知道,疑似poj炸了, #include<iostream> #include<cstdio> ...

  9. Dungeon Master POJ-2251 三维BFS

    题目链接:http://poj.org/problem?id=2251 题目大意 你被困在了一个三维的迷宫,找出能通往出口的最短时间.如果走不到出口,输出被困. 思路 由于要找最短路径,其实就是BFS ...

  10. POJ 2251 Dungeon Master(三维空间bfs)

    题意:三维空间求最短路,可前后左右上下移动. 分析:开三维数组即可. #include<cstdio> #include<cstring> #include<queue& ...

随机推荐

  1. SQL Server 脚本跟踪

    1.查询 DataBasesID select db_id('regdatas') 2.获取进程ID 3.过滤定位

  2. &&运算符和||运算符的优先级问题 专题

    public class SyntaxTest { @Test public void test() { System.out.println(true || true && fals ...

  3. 在C#中,为什么大家用httpcontext.current,不直接用HttpContext

    HttpContext只是个类名,HttpContext.Current才是一个已实例化的对象..比如这样一个类: class A{ public static A Current{get;set;} ...

  4. 《C#高效编程》读书笔记05-为类型提供ToString()方法

    System.Object.ToString()是.NET环境中最常用的方法之一.编写类型时,要提供一个合理的ToString版本,否则使用者就不得不自己构造一套可以阅读的表示. public cla ...

  5. jQuery的parent和parents和closest区别

    1.parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.2.parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选.3.clo ...

  6. 大数四则运算java(转)

    // 大数的四则运算 #include <iostream> #include <string> #include <algorithm> using namesp ...

  7. c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。

    #include<iostream> #include<stdio.h> using namespace std; ; char *itostr (int n,char *St ...

  8. sql server 2012不能全部用到CPU的逻辑核心数的问题

    最近在工作中遇到了,sql server 2012 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题,那么今天这节就先 ...

  9. 将数据库数据添加到ListView控件中

    实现效果: 知识运用: ListView控件中的Items集合的Clear方法 //从listView控件的数据项集合中移除所有数据项 补充:可以使用Remove或RemoveAt方法从集合中移除单个 ...

  10. python_10_for guess

    age_of_oldboy=56 count=0 for count in range(3): guess_age=int(input('guess age:')) if guess_age==age ...