如何使用python动画演示深度优先算法搜寻逃出迷宫的路径

  介绍

这篇文章主要介绍了如何使用python动画演示深度优先算法搜寻逃出迷宫的路径,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

python主要用来做什么

python主要应用于:1,网络开发;2、数据科学研究;3,网络爬虫;4、嵌入式应用开发,5日游戏开发;6桌面应用开发。

<强>深度优先算法(DFS算法)是什么?

寻找起始节点与目标节点之间路径的算法,常用于搜索逃出迷宫的路径。主要思想的是,从入口开始,依次搜寻周围可能的节点坐标,但不会重复经过同一个节点,且不能通过障碍节点。如果走到某个节点发现无路可走,那么就会回退到上一个节点,重新选择其他路径。直到找到出口,或者退到起点再也无路可走,游戏结束。当然,深度优先算法,只要查找到一条行得通的路径,就会停止搜索,也就是说只要有路可走,深度优先算法就不会回退到上一步。

如果你依然在编程的世界里迷茫,可以加入我们的python学习扣群:784758214,看看前辈们是如何学习的!交流经验!自己是一名高级python开发工程师,从基础的python脚本到Web开发,爬的虫,django,数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的python学习者聚集地

下图是使用DFS算法搜寻出来的一条路径:

如何使用python动画演示深度优先算法搜寻逃出迷宫的路径

总结一下:

从起点开始,查询下一步走得通的节点,将这些可能的节点压入堆栈中,已经走过的节点不再尝试。查询完毕之后,从堆栈中取出一个节点,查询该节点周围是否存在走得通的节点。如果不存在可能的节点,就继续从堆栈中取一个节点。重复以上操作,直到当前节点为终点,或者堆栈中再无节点。

<强>定义数据:

<李>

起始节点与目标节点

<李>

存储节点的堆栈

<李>


<强>定义辅助函数

<李>

获取下一节点的函数:继任者

<李>

判断是否为终点的函数:test_goal

首先,我们来定义栈这种数据结构,栈是一种后进先出的数据结构。

因为之后的广度优先搜索会使用到队列,A *算法会用到优先队列,我们定义了抽象基类,以便后续使用.deque是双端队列,与内置类型列表操作类似,但头部与尾部插入和删除操作的时间复杂度均为O (1)。

#, utils.py   得到abc  import  abstractmethod, ABC   得到collections  import 双端队列   class 基地(美国广播公司):   def 才能__init__(自我):   ,,,self._container =,双端队列()   @abstractmethod才能   def 才能推动(自我,,值):   ,,,“““push  item"““   @abstractmethod才能   def 才能;流行(自我):   ,,,“““pop  item"““   def 才能__len__(自我):   ,,,return  len (self._container)   def 才能__repr__(自我):   ,,,return  f # 39;{类型(自我).__name__}({列表(self._container)}) & # 39;   class 堆栈(基础):   def 才能推动(自我,,值):   ,,,self._container.append(值)   def 才能;流行(自我):   ,,,return  self._container.pop ()

下面我们来定义dfs函数。其中,初始为初始节点,年代为栈,用标记来记录经过的节点.successor函数用来搜寻下一个可能的节点,test_goal函数用来判断该节点是否为目标节点定格为可能的节点列的表,遍历这些节点,将没有走过的节点压入栈中,并做记录。

#, find_path.py   得到utils  import 堆栈   def  dfs(初始,_next =,继任者,_test =, test_goal):   s:才能,Stack =,堆栈()   marked 才能=,{初始}   s.push才能(初始)   while 才能;年代:   ,,,的父母:,state =, s.pop ()   ,,,if  _t(父):   ,,,,,return 父母   ,,,children =, _next(父)   ,,,for  child 孩子们:拷贝   ,,,,,if  child  not 拷贝标记:   ,,,,,,,marked.add(孩子)   ,,,,,,,s.push(孩子)

接下来,我们使用DFS算法寻找迷宫路径,并对搜寻到的迷宫路径进行可视化演示。

首先使用枚举,来表示路径的颜色,空为正常节点,阻塞为障碍节点,开始为迷宫入口,一端为迷宫出口,路径为搜寻的路径。

如何使用python动画演示深度优先算法搜寻逃出迷宫的路径