Dungeon Master
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 13923   Accepted: 5424

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!

这道题最坑人的地方在于poj上将他分类为dfs,结果一写就超时,其实写最短路一般肯定是bfs,哎,经验还是太浅了。
这道题还有一个值得注意的地方就是这是个3维的迷宫,只需要加上上下两个方向就行了,其他的就是简单的bfs。
这道题wa了半天,居然是我忘记把文件输入输出那句话给删了,尼玛!
下面是代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#define pan(a,b,c) (a<=b&&b<=c)
using namespace std; int dir[6][3]={{0,0,-1},{0,0,1},{-1,0,0},{1,0,0},{0,-1,0},{0,1,0}};
char map[35][35][35];
int vis[35][35][35];
int t,m,n,flag;
struct node{
int x,y,z;
int num;
}que[30010]; void bfs(int sx,int sy,int sz){
int head=0;
int tail=1;
que[0].x=sx;
que[0].y=sy;
que[0].z=sz;
que[0].num=0;
vis[sx][sy][sz]=1;
flag=0;
int xx,yy,zz;
while(head<tail){
for(int i=0;i<6;i++){
xx=que[head].x+dir[i][0];
yy=que[head].y+dir[i][1];
zz=que[head].z+dir[i][2];
if(map[xx][yy][zz]=='E'){//搜到终点
printf("Escaped in %d minute(s).\n",que[head].num+1);
flag=1;
break;
}
if(pan(1,xx,t)&&pan(1,yy,m)&&pan(1,zz,n)&&vis[xx][yy][zz]==0&&map[xx][yy][zz]=='.'){//如果在迷宫内,并且未走过
que[tail].x=xx;
que[tail].y=yy;
que[tail].z=zz;
que[tail].num=que[head].num+1;
vis[xx][yy][zz]=1;
tail++;
}
}
if(flag)
break;
head++;//flag不为1,那就要在继续往后走
}
if(!flag)
cout<<"Trapped!"<<endl;
} int main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int i,j,k;
int sx,sy,sz;
while(scanf("%d%d%d",&t,&m,&n)!=EOF){
if(t==0&&m==0&&n==0) break;
for(i=1;i<=t;i++)
for(j=1;j<=m;j++)
for(k=1;k<=n;k++){
cin>>map[i][j][k];
if(map[i][j][k]=='S'){//找到起点
sx=i;
sy=j;
sz=k;
}
}
memset(vis,0,sizeof(vis));
bfs(sx,sy,sz);
}
return 0;
}
												

poj 2251 搜索的更多相关文章

  1. Dungeon Master POJ - 2251 (搜索)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48605   Accepted: 18339 ...

  2. POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索)

    POJ 2251 Dungeon Master /UVA 532 Dungeon Master / ZOJ 1940 Dungeon Master(广度优先搜索) Description You ar ...

  3. POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)

    POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...

  4. BFS POJ 2251 Dungeon Master

    题目传送门 /* BFS:这题很有意思,像是地下城,图是立体的,可以从上张图到下一张图的对应位置,那么也就是三维搜索,多了z坐标轴 */ #include <cstdio> #includ ...

  5. 【BFS】POJ 2251

    POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...

  6. POJ 2251 Dungeon Master(地牢大师)

    p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: ...

  7. 【POJ 2251】Dungeon Master(bfs)

    BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...

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

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

  9. catch that cow POJ 3278 搜索

    catch that cow POJ 3278 搜索 题意 原题链接 john想要抓到那只牛,John和牛的位置在数轴上表示为n和k,john有三种移动方式:1. 向前移动一个单位,2. 向后移动一个 ...

随机推荐

  1. xml--通过jdom解析及生产XML

    JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序.它的设计包含 Java 语言的语法乃至语义. JAXP (用于 XML 语法分析的 Java API)包含了三个软 ...

  2. DOM4J介绍与代码示例【转载】

    DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JA ...

  3. 使用ANT打包Android应用

    大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几 ...

  4. jQgrid问题总结

    最近一段时间一直在使用jqgrid这个免费的插件,网上的资料也比较多.比较全,但是这里还是整理几个自己在开发过程中遇到的小问题. 1.自动换行 一行数据过多需要自动根据内容换行时,如果遇到在表格中的汉 ...

  5. SQLite支持的SQL数据操作

    事务处理 Posted on 2013 年 1 月 1 日 by 林溪   事务为一组SQL命令的集合,这些SQL命令在执行时不可进行分割,即要么全部执行这些SQL命令,要么一个都不进行执行,事务操作 ...

  6. CentOS6脱机rpm安装MariaDB10

    转载请保存原文链接:http://www.wlm.so/Article/Detail/lmb4cijci5mc900000 1.卸载原有mysql安装包,避免安装文件冲突 #查找所有的mysql包 r ...

  7. 信息学院第九届ACM程序设计竞赛题解

     A: 信号与系统 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 238 Accepted: 44 Page View: 69 Des ...

  8. String的intern方法的用处

    今天第一次翻看Effective java,在其第一个item中讲静态工厂方法的有点的时候说到“它们每次被调用 的时候,不要非得创建一个新的对象”并在结尾处提到---"String.inte ...

  9. 【jQuery日期处理】两个时间大小的比较

    function checkEndTime(){ var startTime=$("#startTime").val(); var start=new Date(startTime ...

  10. Annotation介绍@interface

    Annotation是继承自java.lang.annotation.Annotation的类,用于向程序分析工具或虚拟机提供package class field methed 等方面的信息,它和其 ...