编程题走迷宫_你竟然不知道怎么走迷宫?其实超简单

ee26cdd4091ed6fc8ae7a4cb5d11a492.png

迷宫寻路是计算机编程中基础的问题,常用的算法为广度优先(BFS)和深度优先(DFS)

广度优先、深度优先听起来很高大上的样子,其实非常好理解。

广度优先

在一个点向其周围各个点每个点都尝试走一下,判断哪些能走那些不能走,把能走的点位记录下来(叫做A1)。之后在A1的第一个点位上选择一个点尝试其周围点位是否能走,把能走的记录下来(叫做A2)。再在A1的第二个点位上判断其周围点位是否能走,把能走的追加记录到A2,如此循环直到A1上所有的点都把其周围的可以走的点记录到A2中。

接下来把A2当做A1继续上一段的探索。

c00a376201fb28b0e4338f7310895db6.gif

广度优先

深度优先

在一个点向其周围各个点每个点都尝试走一下,当找到一个可以行走的点的时候,以新找到的点为基准继续寻找改点周围那些点是否可以行走,直到找到终点或者无路可走。

无路可走的时候将基准点回退到上一个点,继续尝试上一个点周围可以行走的点。如此往复直到找到终点。

72d3b4e7033e9c532cc41e754915a7d8.gif

深度优先


下面看一个老郝通过自己编写的可视化算法工具录制的深度优先算法执行过程:

6dfeb7d9b54b22bd432bc0a735bd95d1.gif

上图是搜索到过程,下图记录最佳路径

红色图块为当前探索图块,蓝色图块为已经走过的图块。

该算法并不是找到一条路就会结束,而是需要找到走出迷宫最短的路径。

福利大放送,直接上代码(JS)

324cddd7f6eb51504488c4a093199306.png

通过二维数组构建迷宫,Move函数是主递归函数(还记得进入递归函数后第一件事要干啥不?判断退出条件)。在Move函数中首先判断是否到达终点,其次判断是否探索越界或者当前的步数已经超过了保存的最少步数。最后累加步数,在当前位置基础上进行上下左右的尝试。

Move函数中最后两行尤为重要。

他们代表着当前点向上下左右尝试失败后当前点也就意味着失败。所以把当前点重置,并且把当前步数减掉,回退到上一个点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值