文章插图
迷宫寻路是计算机编程中基础的问题,常用的算法为广度优先(BFS)和深度优先(DFS)广度优先、深度优先听起来很高大上的样子,其实非常好理解 。
广度优先在一个点向其周围各个点每个点都尝试走一下,判断哪些能走那些不能走,把能走的点位记录下来(叫做A1) 。之后在A1的第一个点位上选择一个点尝试其周围点位是否能走,把能走的记录下来(叫做A2) 。再在A1的第二个点位上判断其周围点位是否能走,把能走的追加记录到A2,如此循环直到A1上所有的点都把其周围的可以走的点记录到A2中 。
【幻境迷宫怎么走图解 幻境迷宫怎么走 幻境迷宫走错了怎么走】接下来把A2当做A1继续上一段的探索 。
文章插图
广度优先
深度优先在一个点向其周围各个点每个点都尝试走一下,当找到一个可以行走的点的时候,以新找到的点为基准继续寻找改点周围那些点是否可以行走,直到找到终点或者无路可走 。
无路可走的时候将基准点回退到上一个点,继续尝试上一个点周围可以行走的点 。如此往复直到找到终点 。
文章插图
深度优先
下面看一个老郝通过自己编写的可视化算法工具录制的深度优先算法执行过程:
文章插图
上图是搜索到过程,下图记录最佳路径
红色图块为当前探索图块,蓝色图块为已经走过的图块 。
该算法并不是找到一条路就会结束,而是需要找到走出迷宫最短的路径 。
福利大放送,直接上代码(JS)
文章插图
通过二维数组构建迷宫,Move函数是主递归函数(还记得进入递归函数后第一件事要干啥不?判断退出条件) 。在Move函数中首先判断是否到达终点,其次判断是否探索越界或者当前的步数已经超过了保存的最少步数 。最后累加步数,在当前位置基础上进行上下左右的尝试 。
Move函数中最后两行尤为重要 。他们代表着当前点向上下左右尝试失败后当前点也就意味着失败 。所以把当前点重置,并且把当前步数减掉,回退到上一个点 。
- 速冻烧麦蒸几分钟比较合适 速冻烧麦没有蒸锅怎么蒸 烧麦怎样蒸不会变形
- 摩托罗拉对讲机调频教程 摩托罗拉对讲机怎么建群组
- 青蟹可以冷藏几天 青蟹冷藏几小时后不能动了能吃吗 青蟹怎么在冰箱保存
- 安装电脑系统按F12后怎么选择 电脑如何按F12安装系统
- 别忽视早餐的重要性怎么吃好
- mac电脑怎么样进水算严重 Mac电脑怎么样修改文件名
- 梦见抓螃蟹是怎么回事 梦见抓螃蟹是什么意思啊
- 明星是如何空降粉丝群 微博怎么看空降粉丝群
- 吃了烧麦不消化 烧麦吃不完怎么保存 隔夜的烧麦还能吃吗
- 洋姜皮绿了怎么办 洋姜发绿了还能吃吗 洋姜为什么没有姜味