首页 > 编程知识 正文

python广度优先算法,广度优先搜索算法

时间:2023-05-05 17:22:17 阅读:16302 作者:955

宽度优先算法本文主要以介绍算法思想为主,这里没有进行源代码的实现,但给出了推荐的数据结构和主要思想。

首先介绍宽度优先算法。 假设要寻找ab2点之间的最短距离。 以a为起点b为终点。 首先,可以遍历a的相邻节点。 这些节点称为主关系,如果它们不是主关系,则遍历主关系的相邻节点。 遍历的这些节点称为辅助关系。 这样遍历到b点时,该遍历路径为最短路径。

广度优先算法的实现:

宽度优先算法需要利用队列先进先出特性,首先对第一个节点进行排队,然后进入循环1234循环:

1 .每当第一个从队列中放入的节点弹出时

2 .确定该节点是否已遍历,根长度是否最佳,目的地节点是否为跳转循环

3 .遍历该节点的下一个节点,对满足条件的节点进行排队

4 .记录当前节点与当前节点的下一个节点关系。

以上图在准以下说明广度优先算法的具体实现步骤和思路。

阐述了广度优先算法的实现目的地使用了排队先进先出的特性,因此事先声明queue。 queue的元素是节点下标,声明map,key是当前节点的下标,value是结构(包括上一个节点下标与起点之间的距离)。

准备完成后,必须初始化队列和地图。 队列入队到0节点,贴图的密钥为0。 上一个节点可以设置为-1。 第一个节点前面的节点没有任何意义。 距离设定为0。 第一个节点和自己的距离当然是0。

已初始化的队列和地图

这种想法是,在每进行遍历时,从队列中退出,遍历相邻节点,满足请求后,相邻节点进入队列

遍历节点的信息存储在map中,可以用下标(key )看到节点的信息(value )

接下来进入主要循环扫描。

第一个循环:

搜索队列0节点、相邻节点1、2,注册到搜索到的队列、map

第二个循环:

将一个节点出队,搜索在相邻节点2、3处搜索到的入队,并注册map。 由于发现了2个节点,(可以在map中从key=2中发现) )判断长度为0-2=12,0-1-2=10,更新map,2之前的节点为1,距0时的距离为10

第三个循环:

退出团队2节点,搜索相邻节点4搜索到的入队,并向map进行注册

第四个循环:

走出团队3节点,搜索相邻节点2、4、5搜索到的入队,并向map注册。 2节点4节点都被搜索到了,所以比较长度0-1-2=10; 0-1-3-2=8更新map,通过2节点更新2节点4需要更新0-1-3-2-4=130-1-3-4=17更新map。

第五个循环:

走出团队4节点,搜索相邻节点5搜索到的入队,并向map进行注册。

第六个循环:

退出队伍,以5个节点为终点结束循环搜索。

总结以上的第三循环,宽度优先算法在节点间的距离不相等的情况下(需要判断节点间的距离),需要修改变更后的所有节点,例如循环3中的2个节点,例如循环3中的4个节点,进行操作其实这种节点之间的关系适合用Dijkstra算法来计算。

指向Dijkstra算法的链接: https://blog.csdn.net/QQ _ 33865609/article/details/117073021

以上文章的作者在网上找资料自己思考总结。 如果有不足的话请指导我。 谢谢你。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。