BFS & DFS 迷宫

本文探讨如何使用 BFS 和 DFS 在完美迷宫中找到路径。BFS 是一种迭代方法,寻找最短路径,而 DFS 则是递归回溯策略,适用于寻找至少一条路径。文章通过实例解释了两种算法的实现过程和特性。
摘要由CSDN通过智能技术生成

上一篇“一文弄懂递归”中,埋了一个使用递归来找到迷宫的解的坑。这篇文章记录一下如何使用 BFS 和 DFS 来找到迷宫的解。

迷宫

这篇文章主要是针对一种被称为“完美迷宫”的特殊迷宫类型。一个完美迷宫是一个没有环路和不可进入的区域,起点和终点都由一条路径连接的迷宫。
下图显示了一个完美的迷宫,以及从左上角的入口到右下角的出口的路径:

A perfect maze

-------
-@@@@@-
-----@-
-@@@-@-
-@---@-

你会接收到这样的一个输入,其中-代表通路,@代表墙。

针对这个输入,会提供一个 readMazeFile() 方法来读取数据,它会把数据读成一个二维向量,为了方便,我们这里用 grid 简称。其中每一个元素可以用 grid[row][col] 来进行访问。如果是通路,那么就会返回 true, 如果是思路就会返回 false。

接下来,这篇文章将讲解如何使用 BFS( 广度优先搜索) 与 DFS( 深度优先搜索) 来让计算机找到这个迷宫的解。

BFS 广度优先搜索

特征与要求

特征:
- Nearly exhaustive search
- 如果在当前长度没有搜索到采取搜索下一层:如搜索了所有的两步内的结果,没有找到,采取寻找第三步

需要的数据结构:

A data structure to represent (partial word) ladders

  • 我们需要一个能够记录我们走了什么路径的数据结构 —— Stack

A data structure to store all the partial word ladders that we have generated so far and have yet to explore

  • 我们需要记录我们还要探索哪些路径 —— Queue

A data structure to keep track of all the words that we've explored so far, so that we avoid getting stuck in loops

  • 我们需要有一个能够记录我们已经走了哪些位置的数据结构 ——Set

有了如上的数据结构,我们可以看一下如何使用它们

例子

假设我们要走如下这个迷宫,我们的起点是左下角,并且我们只能向上或者向右走。

迷宫

首先,在探索可以走的点(邻近)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值