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

一道简单的BFS,只不过是二维数组,变三维数组,也就在原来基础上加了两个方向。

题意就是从S走到E,#不能走。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <queue>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. #define judge(x,y,z) mark[x][y][z]&&str1[x][y][z]!='#'&&x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<c //判断这个点是否可以走。
  8. char str1[][][];
  9. int l,r,c,sx,sy,sz,ex,ey,ez,step[][][];
  10. int dic[][]{,,,,,-,,,,-,,,,,,,-,}; //方向。
  11.  
  12. struct note{
  13. int x,y,z;
  14. };
  15. bool mark[][][];
  16. queue<note>s; //定义了一个s的结构体队列。因为一个点要通过三个值来确定,所以这里选择用结构体是比较方便的。
  17.  
  18. void bfs(int x,int y,int z)
  19. {
  20. note u;
  21. u.x=x,u.y=y,u.z=z;
  22. while(!s.empty())
  23. s.pop();
  24. s.push(u);
  25. while(!s.empty())
  26. {
  27. note v;
  28. v=s.front();
  29. s.pop();
  30. if(v.x==ex&&v.y==ey&&v.z==ez) return;
  31. for(int i=;i<;i++)
  32. {
  33. u.x=v.x+dic[i][];
  34. u.y=v.y+dic[i][];
  35. u.z=v.z+dic[i][];
  36. if(judge(u.x,u.y,u.z)){
  37. step[u.x][u.y][u.z]=step[v.x][v.y][v.z]+;
  38. mark[u.x][u.y][u.z]=false;
  39. s.push(u);
  40. }
  41. }
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. while(scanf("%d%d%d",&l,&r,&c),l!=&&r!=&&c!=)
  48. {
  49. memset(mark,true,sizeof(mark));
  50. memset(str1,,sizeof(str1));
  51. memset(step,,sizeof(step));
  52. for(int i=;i<l;i++)
  53. for(int j=;j<r;j++)
  54. {
  55. scanf("%s",str1[i][j]);
  56. for(int k=;k<c;k++)
  57. {
  58. if(str1[i][j][k]=='S')
  59. {
  60. sx=i;
  61. sy=j;
  62. sz=k;
  63. }
  64. if(str1[i][j][k]=='E')
  65. {
  66. ex=i;
  67. ey=j;
  68. ez=k;
  69. }
  70. }
  71. }
  72. step[sx][sy][sz]=;
  73. bfs(sx,sy,sz);
  74. if(step[ex][ey][ez]==) printf("Trapped!\n"); //如果走不到那个点,那么那个点的步数肯定是为0的,通过这个条件来判断是否可以找到那一个出口。
  75. else printf("Escaped in %d minute(s).\n",step[ex][ey][ez]);
  76. }
  77. }

poj 2251的更多相关文章

  1. 【BFS】POJ 2251

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

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

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

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

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

  4. 【POJ 2251】Dungeon Master(bfs)

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

  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. CSS 简介

    CSS 简介 需要具备的基础知识 在继续学习之前,你需要对下面的知识有基本的了解: HTML XHTML CSS 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义 ...

  2. 使用Robomongo 连接MongoDB 3.x 报 Authorization failed 解决办法(转)

    最近安装了mongodb3.1.4,并启用了权限验证,在dos窗口下操作没有任何问题,为了维护方便就下载了一个客户端工具Robomongo 0.8.5,用户名.密码的等配置好点解测试,结果连接服务没有 ...

  3. 二、oracle pctfree和pctused详解

    一.建立表时候,注意PCTFREE参数的作用 PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert ...

  4. “Transaction rolled back because it has been marked as rollback-only”

    spring的声明事务提供了强大功能,让我们把业务关注和非业务关注的东西又分离开了.好东西的使用,总是需要有代价的.使用声明事务的时候,一 个不小心经常会碰到“Transaction rolled b ...

  5. Unity调试相关

    1.LOG处理 将所有LOG信息写入到文件,并设置部分LOG显示到屏幕上,总结成以下脚本,将其挂载在摄像机上即可. using UnityEngine; using System.Collection ...

  6. dubbo框架----探索-大型系统架构设计(图解)

    对于高并发系统的架构要求: 1. 负载均衡 2.高并发 3.高可用 4.面向服务架构 (Dubbo框架使用) 5.分布式缓存 (redis分布式缓存) 6.分布式全文检索 (solr分分布式全文检索) ...

  7. ADB常用命令(Android Debug Bridge)

    首先要配置环境变量. adb devices 列出所有的设备 adb start-server 开启adb服务 adb kill-server    关闭adb服务 adb logcat    查看L ...

  8. 来聊聊apply和call

    今天在群里讨论的时候,看到有人问apply怎么使用,突然想起自己刚接触这个方法的时候,也是一样的摸不着头脑. 记得当时上网看了很多讲解,可实际用的时候还是感觉有些蒙蒙哒orz.... 后来想一想,也许 ...

  9. solr多条件查询(一)

    每个项目的数据结构可能不同,查询的格式有可能不同,本项目所有的字段为动态的,所以整理了一下, 1.查询所有字段中包含”测试“但是所有的TM不包含”江苏大学“ q:X_1457955996315KEY: ...

  10. [AngularJS] jQuery时代

    抹平浏览器差异的jQuery出现了 jQuery有什么 jQuery使得开发无刷新动态页面(AJAX)或者单页应用(SAP)变得 相当简单. 标准的HTML页面是静态的,被浏览器渲染后就产生了一个DO ...