自动走迷宫--广度优先算法

Posted 嘻嘻哈哈学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动走迷宫--广度优先算法相关的知识,希望对你有一定的参考价值。

这是我2019年坚持制作的第91次推文



       迷宫系列的最后一期了,在这个系列中分别用算法生成随机迷宫,寻找迷宫的出口;在编写过程中领略到了算法的魅力所在,算法真的是程序的灵魂,理解并掌握了算法的真正意义后,在处理问题中真的是非常省心,逻辑清晰明了;像在用‘左手法则’走迷宫中不但要考虑碰撞检测还要考虑角色的大小和每次行走距离,参数一旦不符合很难得到想要的结果,不像用算法,根本不用考虑这些因素,只要按照算法模板把逻辑表达清晰了就可以了! 所以掌握一些算法是非常有必要的! ~

        用广度优先寻找迷宫出口实现起来比起深度优先稍微复杂点,我把它分成两个部分来处理,分别是广度优先遍历通路单元和寻找最佳路径。
       第一部分是典型的广度优先遍历算法,所用到的数据结构为队列(先进先出),就是按照层级关系逐级遍历每一个‘路’节点,直到找到迷宫出口。实施步骤如下:
        1、将起点压入队列
        2、重复循环以下步骤,直到队列为空
                (1)、弹出队列第一个元素,将其周围邻接节点(是路、未访问)压入队列
                (2)、将其标记为已访问。
        3、在循环过程中还需要将遍历过的节点和父节点分别存入到遍历过的节点列表和父节点列表中,给第二部分使用,代码如下,其中的单元访问显示函数是为了动态展示广度优先层级遍历的特点,可以不加;确定最佳路径则是第二部分内容。



自动走迷宫(4)--广度优先算法


       运行以上代码我们就获得了从起点到终点所有‘是路’的节点,接下来的第二部分就是从这些节点中找到一条起点通往终点的最佳路径,在第一部分存储遍历过的节点的同时还保存了它们的父节点,要找到这条路径一般的做法是从终点开始查找它的父节点,并存入最佳路径列表中,然后再找到父节点的父节点,再存放最佳路径列表.......直到起点(一开始做了个结束标志‘-’),这样我们就真正得到了从终点到起点存储了父节点的列表,这个就是迷宫的通路。文字表达能力有限,不知道大家明白了吗?自动走迷宫(4)--广度优先算法 上代码!~


自动走迷宫(4)--广度优先算法


主程序


自动走迷宫(4)--广度优先算法


绘制路线方法代码太宽还是截不全自动走迷宫(4)--广度优先算法


自动走迷宫(4)--广度优先算法



返回周围节点方法


自动走迷宫(4)--广度优先算法


动态展示节点显示








相关文章









以上是关于自动走迷宫--广度优先算法的主要内容,如果未能解决你的问题,请参考以下文章

算法浅谈——走迷宫问题与广度优先搜索

Golang 广度优先搜索算法走迷宫

[算法与数据结构] 走迷宫问题(广度与深度优先搜索)

走迷宫之广度优先搜索

(c++)迷宫自动寻路-队列-广度优先算法-附带寻路打印动画

ybt 1252 广度优先搜索 走迷宫(二维最小步数)