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 = 70 ;
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[7][4] = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}} ;
//存的方向,分别为上,下,东,西,北,南代表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 = 0 ;//初始化Q.push(ch) ;//入队列vis[z][x][y] = 1 ;//标记为1while(!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 = 0 ; i < 6 ; i++)//东南西北上下六个方向进行搜索
        {zz = sh.z+s[i][0] ;xx = sh.x+s[i][1] ;yy = sh.y+s[i][2] ;if(zz>=0&&xx>=0&&yy>=0&&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+1;Q.push(ch) ;vis[zz][xx][yy] = 1 ;//标记这个点为已访问
            }}}
}
int main()
{while(~scanf("%d %d %d",&floor,&row,&col)){if(floor == 0&& row == 0&&col == 0)break ;stepp = 0 ;memset(vis,0,sizeof(vis)) ;for(int i = 0 ; i < floor ; i++){for(int j = 0 ; j < row ; j++){cin>>map[i][j] ;getchar();for(int k = 0 ; 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 == 0)cout<<"Trapped!"<<endl ;elsecout<<"Escaped in "<<stepp<<" minute(s)."<<endl ;}return 0 ;
}

View Code

转载于:https://www.cnblogs.com/luyingfeng/p/3283280.html

POJ2251Dungeon Master相关推荐

  1. 【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】

    POJ1321棋盘问题 题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k ...

  2. POJ2251-Dungeon Master

    题目链接:点击打开链接 Description You are trapped in a 3D dungeon and need to find the quickest way out! The d ...

  3. kuangbin 专题一 简单搜索

    kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...

  4. git 创建分支并合并到master 上

    1 创建一个dev的分支 git branch dev 2 切换到dev 分支上 git checkout dev (创建并切换是git checkout -b 分支名) -------------- ...

  5. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  6. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理

    一.创建用户 1.创建管理gitlab的开发人员的用户 2.配置用户信息 3.将用户添加到java-daem组中 4.用户登录成功后,在用户界面为用户添加ssh认证 5.在linux主机中将maste ...

  7. Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class

    标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率. 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量, ...

  8. c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D

    c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+机译中 ...

  9. Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

    Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 ...

最新文章

  1. import提升导致Fundebug报错:“请配置apikey”
  2. MyEclipse解决Launching xx on MyEclipse Tomcat has encountered a problem
  3. table: github.com/astaxie/beego/orm.Ormer not found
  4. 自己用嵌入式系统搭建云服务器,嵌入式服务器搭建
  5. 中小学课java_java毕业设计_springboot框架的中小学排课与实现
  6. c语言 字符去重复以及冒泡排序
  7. AE中图层叠加模式的中英对照及说明
  8. C/C++ EasyX 立方体与超立方体的投影 与 伸缩和旋转变换
  9. img标签图片自适应
  10. 读取EXCEL表格数据到MATLAB成为矩阵
  11. 3.7计算机网络(IP数据报格式,IP数据报分片,IPv4)
  12. python去除图片水印_Python | 图中使用类的水印
  13. 汪国真的八字命理分析
  14. 外呼系统《OpenSIPS2.4代理FreeSwitch》(2022版)
  15. httpclient-Connection pool shut down 问题排查
  16. TCP协议面试10连问,网友直呼太强!
  17. 折腾人的 excel 计算公式
  18. 旺旺:长风破浪会有时,28年终不止
  19. html如何通过路径查找图片,css添加图片怎样找图片路径?
  20. kubesphere 问题解决

热门文章

  1. USACO3.15stamps(dp)
  2. asp.net服务器端跳转页面的三种方法
  3. C++ 运算符优先级
  4. NET Framework 4.0 安装失败:安装时发生严重错误
  5. 我所知道的Ribbon库
  6. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异
  7. android usb弹窗权限r,Android USB权限对话框永远不会出现
  8. B系列台达服务器解密码步骤,台达HMI解密,DOP-A解密,DOP-B解密,文件密码解密
  9. Bash脚本教程之变量
  10. css3优惠卷上方锯齿_css3怎么实现锯齿边框?