原创


上次用DFS解了迷宫救人:https://www.cnblogs.com/chiweiming/p/9313164.html

这次用BFS(广度优先搜索),实现广度优先搜索比深度优先搜索复杂,思路也复杂一些,但是不难理解。

深度优先搜索是一笔画下来,一条道走到黑;

广度优先搜索是多步同时进行,全面展开搜索;

两者都是在找到目的地前遍历所有路径,但是在寻找最短路径时,使用广度优先搜索一旦到达目的地,即

产生最短路径,而深度优先搜索需要比较所有能到达目的地的路径。

实现广度优先搜索用到了队列来存储目前已经搜查过的点,然后再在这些已经被搜查过的点的基础上再次搜索。

实现广度优先搜索的过程可以用下图来表示(按右、下、左、上的顺序来遍历):

起始点是1(入队列),1步之内可到达的点有2(入队列)和3(入队列),所以搜索2和3;

此时1已经无用,出队,2可以直达的点有4(入队)和5(入队),2无用出队;

3可直达的点有5(已遍历)和6(入队),3无用出队;

每遍历一个点判断是否为人质所在点,是则停止遍历。

Java:

import java.util.*;public class 迷宫救人 {static int n;static int m;public static void main(String[] args) {Scanner reader=new Scanner(System.in);n=reader.nextInt();m=reader.nextInt();int flag=0;    //0表示人质为找到int head=0;    //指向父结点int tail=0;    //指向尾结点int maze[][]=new int[n][m];    //迷宫int book[][]=new int[n][m];    //标志int x[]=new int[n*m];    //队列横坐标int y[]=new int[n*m];    //队列纵坐标int step[]=new int[n*m];    //队列步数int dir[][]= {{0,1},{1,0},{0,-1},{-1,0}    //右,下,左,上
        };for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {maze[i][j]=reader.nextInt();book[i][j]=0;}}book[0][0]=1;    //起始结点//起始结点入队列x[tail]=0;y[tail]=0;step[tail]=0;tail++;    //尾指针后移while(head<=tail) {for(int i=0;i<4;i++) {int dx=x[head]+dir[i][0];int dy=y[head]+dir[i][1];if(dx<0 || dx>n-1 || dy<0 || dy>m-1) {    //越界判断continue;}if(maze[dx][dy]==1 || book[dx][dy]==1) {    //障碍点和访问与否判断continue;}//符合条件,入队列book[dx][dy]=1;x[tail]=dx;y[tail]=dy;step[tail]=step[head]+1;tail++;if(maze[dx][dy]==2) {flag=1;    //发现人质break;}}if(flag==1) {break;}head++;    //父结点出队
        }System.out.println("("+x[tail-1]+","+y[tail-1]+")"+" "+step[tail-1]);}}

18:01:03

2018-07-19

转载于:https://www.cnblogs.com/chiweiming/p/9337316.html

再次迷宫救人——BFS相关推荐

  1. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  2. 01迷宫(BFS+记忆)

    题目描述 有一个仅由数字 0 与 1 组成的 n × n 格迷宫.若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 ...

  3. POJ 3984 迷宫问题 BFS求最短路线+路径记录

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31050   Accepted: 17826 Descriptio ...

  4. [蓝桥杯][算法提高VIP]学霸的迷宫(bfs+dfs)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  5. 走迷宫-双向bfs解法

    双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...

  6. poj3984 迷宫问题 bfs 最短路 广搜

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27913   Accepted: 16091 Descriptio ...

  7. 【牛客 - 330C】Applese 走迷宫(bfs)

    题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...

  8. LeetCode 490. 迷宫(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下时,可以选择下一个方 ...

  9. java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...

最新文章

  1. java实现筛选_教你用Java web实现多条件过滤功能
  2. 某中国500强企业BI系统成功应用案例
  3. Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
  4. 参与Apache顶级开源项目的N种方式,Apache Dubbo Samples SIG 成立!
  5. python基础-元组
  6. CoreAnimation编程指南(二)渲染架构
  7. (王道408考研操作系统)第三章内存管理-第一节6-1:非连续分配管理方式之基本分页存储管理
  8. 找2个数组中相同的数
  9. 音频放大电路_集成电路技术汇总:检测技巧
  10. Hibernate-02-核心配置文件Hibernate.cfg.xml
  11. 电脑qq浏览器怎么滚动截长图_QQ浏览器怎样实现长截图
  12. 单总线结构CPU数据通路
  13. 图像坐标系、相机坐标系和世界坐标系 相机的内、外参数矩阵
  14. c语言中char ch和getchar()是什么意思?
  15. c语言 实验报告:分支结构程序设计
  16. XP突然弹出“automation 服务器不能创建对象”的有效解决方法--win10专业版
  17. 由AFX_IDW_PANE_FIRST宏的含义分析界面库XTP的一个bug
  18. Bootstrap轮播插件,代码步骤
  19. CTF-WEB总结(四-题目来源i春秋)
  20. 数据结构括号是否匹配

热门文章

  1. 安全扫码专业委员会 万能码 商盟
  2. Leaf中的Marker cluster
  3. EduIQ Network LookOut Administrator
  4. Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
  5. 自动化测试框架[Cypress Custom Commands]
  6. 无刷电机驱动器设计中开环、速度环、电流环
  7. ISO模型与tcpip模型
  8. 【板栗糖GIS】arcmap—如何将shp要素转成带注记的dwg格式
  9. cgb2007-京淘day09
  10. 6-4 指针选择法排序