Dungeon Master
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 27520   Accepted: 10776

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 "iostream"
#include "cstdio"
#include "fstream"
#include "sstream"
#include "cstring" using namespace std;
const int maxN = 3e4 + 1e2 ;
struct Queue { int x , y , z ; } ;
typedef long long QAQ ; int dx[ ] = { , - , , , , } ;
int dy[ ] = { , , , , - , } ;
int dz[ ] = { , , - , , , } ; int step[ maxN ] ;
Queue Q[ maxN ] ;
bool vis[ ][ ][ ] ;
char map[ ][ ][ ] ; int L , R , C ;
int start_x , start_y , start_z , des_x , des_y , des_z ;
//QAQ Ans ; void Init ( ) {
memset ( vis , false , sizeof ( vis ) ) ;
memset ( step , , sizeof ( step ) ) ;
} inline bool Check ( const int x_x , const int y_y , const int z_z ) {return ( x_x == des_x && y_y == des_y && z_z == des_z ) ? true : false ; }
int BFS ( ) {
int Head = , Tail = ;
Q[ Tail ].x = start_x ;
Q[ Tail ].y = start_y ;
Q[ Tail ].z = start_z ;
while ( Head <= Tail ) {
for ( int i= ; i< ; ++i ) {
int xx = Q[ Head ].x + dx[ i ] ;
int yy = Q[ Head ].y + dy[ i ] ;
int zz = Q[ Head ].z + dz[ i ] ;
if( !vis[ xx ][ yy ][ zz ] && ( map[ xx ][ yy ][ zz ] == '.' ) && xx >= && xx < L && yy >= && yy < R && zz >= && zz < C ) {
vis[ xx ][ yy ][ zz ] = true ;
Q[ ++Tail ].x = xx ;
Q[ Tail ].y = yy ;
Q[ Tail ].z = zz ;
step [ Tail ] = step[ Head ] + ;
if ( Check ( xx , yy , zz ) ) return step[ Tail ] ;
}
}
++ Head ;
}
return false ;
} void Scan ( ) {
for ( int i= ; i<L ; ++i , getchar ( ) ){
for ( int j= ; j<R ; ++j , getchar ( ) ){
for ( int k= ; k<C ; ++k ) {
map[ i ][ j ][ k ] = getchar ( ) ;
if ( map[ i ][ j ][ k ] == 'S' ) {
start_x = i ;
start_y = j ;
start_z = k ;
}
else if ( map[ i ][ j ][ k ] == 'E' ) {
map[ i ][ j ][ k ] = '.' ;
des_x = i ;
des_y = j ;
des_z = k ;
}
}
}
}
} inline void Print ( int temp ) {
if( temp ) printf ( "Escaped in %d minute(s).\n" , temp ) ;
else printf ( "Trapped!\n" ) ;
} int main ( ) {
while ( scanf ( "%d %d %d\n " , &L , &R , &C ) == && L && R && C ) {
Init ( ) ;
Scan ( );
Print ( BFS( ) ) ;
}
return ;
}

2016-10-19 18:50:40

(完)

POJ 2251 题解的更多相关文章

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

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

  2. 【POJ 2251】Dungeon Master(bfs)

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

  3. 【BFS】POJ 2251

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

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

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

  5. 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 ...

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

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

  7. BFS POJ 2251 Dungeon Master

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

  8. [ACM训练] 算法初级 之 搜索算法 之 深度优先算法DFS (POJ 2251+2488+3083+3009+1321)

    对于深度优先算法,第一个直观的想法是只要是要求输出最短情况的详细步骤的题目基本上都要使用深度优先来解决.比较常见的题目类型比如寻路等,可以结合相关的经典算法进行分析. 常用步骤: 第一道题目:Dung ...

  9. poj 2251 Dungeon Master

    http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

随机推荐

  1. java源码分析:Arrays.sort

    仔细分析java的Arrays.sort(version 1.71, 04/21/06)后发现,java对primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用 ...

  2. ajax方法简单实现

    //option {url,medthod,type,data,fSuccess,fError} function ajax(option) { var xhr = window.XMLHttpRqu ...

  3. EF 增删改

    一.新增 UserInfo user = new UserInfo() { UserName = "jamsebing", UserPass = " }; db.User ...

  4. 安装 Ruby, Rails 运行环境 常见的错误

    安装部署ruby on rails 的环境时并不是想的那么顺利 这个是我遇到的问题及解决的方式 参考安装博客: (1) https://ruby-china.org/wiki/install_ruby ...

  5. R包igraph探究

    前段时候由于项目的原因,需要画图,然后开始接触R语言的igraph包,网上零零散散的搜罗了不少的信息,放在这边交流分享的同时也给自己留个备份吧~ 1.首先是读取文件,基本选用的都是csv文件 edge ...

  6. Error: Collection was modified; enumeration operation may not execute.

    http://blog.csdn.net/ffeiffei/article/details/6131254

  7. 实用框架(iframe)代码

    <iframe src="http://www.baidu.com" marginwidth="0" marginheight="0" ...

  8. table的border重合问题

    1. table { border-collapse: collapse; } td { border: 1px solid blue; } 用css的方法直接实现 2. border="1 ...

  9. PHP PDO的setAttribute函数

    数据库的连接: $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=cardslg'; $username = 'root'; $password = ''; ...

  10. angularjs里对JS的lowercase和uppercase的完善

    读angularjs的源码开头. var lowercase = function (string) { return isString(string) ? string.toLowerCase() ...