http://poj.org/problem?id=2251

题意 : 就是迷宫升级版,从以前的一个矩阵也就是一层,变为现在的L层," . "是可以走,但是“#”不可以走,从S走到E,求最短的路径,若是找不到就输出“Trapped!”,每一层的同一个位置若都是" . "是可以直接走的,换句话说,map[1][j][k]与map[2][j][k]若都是" . ",是可以从map[1][j][k]走到map[2][j][k]的

思路 : 求最短路径,用BFS ,这个题比较搞,分类在DFS里,但用DFS会超时啊,所以倒是欺骗了不少童鞋,这个题我没写不出来,会神说用3维的东南西北上下,六个方向进行搜索即可,好吧,好麻烦

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std ;
const int maxn = ;
char map[maxn][maxn][maxn] ;
int vis[maxn][maxn][maxn] ;
struct node
{
int x,y,z;
int step ;
}ch,sh ;
int floor,row,col ;
int s[][] = {{,,},{-,,},{,,},{,-,},{,,},{,,-}} ;
//存的方向,分别为上,下,东,西,北,南代表6个方向,里边的3个元素分别为z轴,x轴,y轴
int ex,ey,ez ;
int stepp,zz,xx,yy;
int sx,sy,sz;
void bfs(int x,int y,int z)
{
queue<node>Q;
ch.x = x ;
ch.y = y ;
ch.z = z ;
ch.step = ;//初始化
Q.push(ch) ;//入队列
vis[z][x][y] = ;//标记为1
while(!Q.empty())
{
sh = Q.front() ;
Q.pop();
if(sh.x == ex&&sh.y == ey&&sh.z == ez)
{
stepp = sh.step ;//如果到了E点,就把步数保存下来,并返回
return ;
}
for(int i = ; i < ; i++)//东南西北上下六个方向进行搜索
{
zz = sh.z+s[i][] ;
xx = sh.x+s[i][] ;
yy = sh.y+s[i][] ;
if(zz>=&&xx>=&&yy>=&&zz<floor&&xx<row&&yy<col&&map[zz][xx][yy]!= '#'&&!vis[zz][xx][yy])
{//找到没有出边界的,不是'#'的,并且未被访问过的就进行入队操作
ch.x = xx ;
ch.y = yy ;
ch.z = zz ;
ch.step = sh.step+;
Q.push(ch) ;
vis[zz][xx][yy] = ;//标记这个点为已访问
}
}
}
}
int main()
{
while(~scanf("%d %d %d",&floor,&row,&col))
{ if(floor == && row == &&col == )
break ;
stepp = ;
memset(vis,,sizeof(vis)) ;
for(int i = ; i < floor ; i++)
{
for(int j = ; j < row ; j++)
{
cin>>map[i][j] ;
getchar();
for(int k = ; k < col ; k++)
{
if(map[i][j][k] == 'S')//把S点的坐标保存下来
{
sz = i ;
sx = j ;
sy = k ;
}
if(map[i][j][k] == 'E')
{
ez = i ;
ex = j ;
ey = k ;
}
}
}
}
bfs(sx,sy,sz) ;
if(stepp == )
cout<<"Trapped!"<<endl ;
else
cout<<"Escaped in "<<stepp<<" minute(s)."<<endl ;
}
return ;
}

POJ2251Dungeon Master的更多相关文章

  1. POJ-2251-Dungeon Master(3D迷宫,BFS)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48111   Accepted: 18149 ...

  2. POJ2251-Dungeon Master

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

  3. POJ2251-Dungeon Master(3维BFS)

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

  4. xamarin MasterDetailPage点击Master时卡顿现象

    在很多项目中经常会使用到MasterDetailPage的布局方式,而且一般做为主页面来开发,在开发中,发现一个并不算Bug的问题,但是却发生了,以此记录下来,方便大家探讨. 现象是这样的,我开发了一 ...

  5. backup3:master 数据库的备份和还原

    在SQL Server 中,master 数据库记录系统级别的元数据,例如,logon accounts, endpoints, linked servers, and system configur ...

  6. 当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长

    最近同事反映,在使用pt-heartbeat监控主从复制延迟的过程中,如果master down掉了,则pt-heartbeat则会连接失败,但会不断重试. 重试本无可厚非,毕竟从使用者的角度来说,希 ...

  7. Win10 UWP开发系列:实现Master/Detail布局

    在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...

  8. 记处理线上记录垃圾日志 The view 'Error' or its master was not found

    最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...

  9. SQL Server 中master..spt_values的应用

    今天在做数据分析报表的时候遇到一个这样的问题. 表结构如下.部门编码.部门名称.部门人员ID(中间用逗号分割) 我想通过和人员表链接,查询出一个新的数据集,查询出的结果集格式如下:人员信息(ID或者姓 ...

随机推荐

  1. js生成 1-100 不重复随机数

    var count=100; var a=new Array(); for(var i=0;i<100;i++){ a[i]=i+1; } a.sort(function(){ return 0 ...

  2. 《RPM源码包的制作》RHEL6

    一下rpm包的创建不含编译部分: 首先写个脚本,这个脚本是你想干的事..useradd.sh是我写的脚本,批量添加20个用户.我们创建一个目录,将脚本放进去: 将此目录压缩: 我们将校验的key导出: ...

  3. win8.1环境下硬盘安装centos6.5双系统

    作为一名软件工程师或是相关行业的从业人员,经常会用到linux系统,这里为大家介绍的安装linux的方案是在原有win环境下安装linux双系统,两个系统选择分别为win8.1 和centos6.5. ...

  4. 在 linux x86-32 模式下分析内存映射流程

    前言 虚拟内存机制已经成为了现代操作系统所不可缺少的一部分, 不仅可以为每个程序提供独立的地址空间保证安全性,更可以通过和磁盘的内存交换来提高内存的使用效率.虚拟内存管理作为linux 上的重要组成部 ...

  5. JAVA多线程学习1

    一.进程与线程 线程是指进程内的一个执行单元(可理解为程序内的一条执行路径),也是进程内的可调度实体. 线程与进程的区别: 1.线程是进程的一个执行单元,一个进程可以拥有多个线程,线程之间共享进程的地 ...

  6. Laravel 5 基础(二)- 路由、控制器和视图简介

    查看 app/Http/routes.php Route::get('/', 'WelcomeController@index'); @是一个界定符,前面是控制器,后面是动作,表示当用户请求url / ...

  7. Python计算斗牛游戏的概率

    Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...

  8. CentOS 6.0 设置IP地址、网关、DNS

    切忌:    在做任何操作之前先备份原文件,我们约定备份文件的名称为:源文件名称+bak,例如原文件名称为:centos.txt    那么备份文件名称为:centos.txtbak 引言:linux ...

  9. [原]项目进阶 之 持续构建环境搭建(四)Jenkins环境搭建

    在之前的几篇文章中,我给大家分别介绍了这次的持续化构建环境搭建的相关前提内容.如果说前面的文章都是小菜的话,那么今天的这篇文章就是我们这个系列文章的主菜. 1.前提 安装jenkins需要安装JDK. ...

  10. UML 小结(6)- UML九种图的比较与学习

    UML中的九种图: 用例图.类图.对象图.状态图.时序图.协作图.活动图.部署图.构件图. 1)用例图(Use Case Diagram) 它是UML中最简单也是最复杂的一种图.说它简单是因为它采用了 ...