POJ 2251 题解
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 27520 | Accepted: 10776 |
Description
Is an escape possible? If yes, how long will it take?
Input
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
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 题解的更多相关文章
- POJ 2251 Dungeon Master(地牢大师)
p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: ...
- 【POJ 2251】Dungeon Master(bfs)
BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> ...
- 【BFS】POJ 2251
POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- 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 ...
- POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...
- BFS POJ 2251 Dungeon Master
题目传送门 /* BFS:这题很有意思,像是地下城,图是立体的,可以从上张图到下一张图的对应位置,那么也就是三维搜索,多了z坐标轴 */ #include <cstdio> #includ ...
- [ACM训练] 算法初级 之 搜索算法 之 深度优先算法DFS (POJ 2251+2488+3083+3009+1321)
对于深度优先算法,第一个直观的想法是只要是要求输出最短情况的详细步骤的题目基本上都要使用深度优先来解决.比较常见的题目类型比如寻路等,可以结合相关的经典算法进行分析. 常用步骤: 第一道题目:Dung ...
- poj 2251 Dungeon Master
http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
随机推荐
- Linux硬链接和软链接
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...
- JVM垃圾回收算法
- linux下apache各种跳转(包括伪静态)的配置
1.404跳转: vi /etc/httpd/conf/httpd.conf 在虚拟主机配置里添加一行:ErrorDocument 404 /404.html 2.301跳转: 1)将不带www的 ...
- LoadRunner 函数之 web_add_cookie
简单示例: Action() { // 添加cookie web_add_cookie("is_login=True;path=/;domain=10.1.102.75"); // ...
- git学习之旅
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d ...
- ThinkPHP真正疑难问题笔记
如何选择线程安全版本还是非线程安全版本: http://www.cnblogs.com/Alight/p/3389113.html(看webserver处理请求时, 使用的是多线程的方式还是 多进程的 ...
- IntersectionObserver API
温馨提示:本文目前仅适用于在 Chrome 51 及以上中浏览. 2016.11.1 追加,Firefox 52 也已经实现. 2016.11.29 追加,Firefox 的人担心目前规范不够稳定,未 ...
- DataTable数据检索的性能分析(转寒江独钓)
我们知道在.NET平台上有很多种数据存储,检索解决方案-ADO.NET Entity Framework,ASP.NET Dynamic Data,XML, NHibernate,LINQ to SQ ...
- 使用OLEQAxObject导出Log日志文件
头文件<QAxObject> Qt project settings需要支持QtActivex container 具体导出如下:(单列这里) QString filepath=QFile ...
- CMake命令/函数汇总(翻译自官方手册)
查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...