广度优先算法

article/2025/9/17 4:01:55

广度优先算法

本文主要以介绍算法思想为主这里并没有进行源码实现,但是给出推荐使用的数据结构和主要思想。

首先介绍一下广度优先算法,假设要查找AB两点之间的最短距离,以A为起点B为终点。可以先遍历A的相邻节点,这些节点称之为一度关系,当一度关系里没有时,就遍历一度关系的相邻节点,遍历到的这些节点可以称之为二度关系,以此类推直到遍历到B点则该遍历路径就为最短路径。

广度优先算法实现:
广度优先算法需要用到队列先进先出的特性,首先将首节点放入队列中,然后进入循环体1234循环:
1.每次从队列中弹出最先放入的节点
2.判断该节点是否被遍历过,以及判断路线长度是否最优,是否是目的地节点是跳出循环
3.遍历该节点的下一节点并将符合条件的节点放入队列中
4.记录当前节点和当前节点下一个节点关系。
在这里插入图片描述

以上图为准下面描述一下广度优先算法的具体实现步骤和思路:
实现广度优先算法上文介绍到了使用队列先进先出的特性,所以先声明一个queue,queue的元素是一个节点下标,声明一个map,key为当前节点的下标,value为一个结构体(包含前一节点下标和与起始点距离)。
准备工作做完之后需要初始化queue和map,queue入队0节点,map的key为0,前一节点可以设为-1(任意无效值都可以,因为首节点的前一节点没有任何意义),距离设置为0(首节点距离自己的距离当然为0)。
初始化后的queue和map
这种思想是每次遍历都是从队列出队遍历相邻节点符合要求后相邻节点入队
将遍历到的节点信息存储在map中通过下标(key)就可以看到节点的信息(value)
在这里插入图片描述
下面进入主要循环遍历。
第一次循环:
出队0节点,探索相邻节点1,2,探索到的入队,登记map
第一次循环
第二次循环:
出队1节点,探索相邻节点2,3探索到的入队,登记map,由于2节点已被发现过(通过key=2到map中可以找到)判断长度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=13;0-1->3->4=17更新map。
第四次循环

第五次循环:
出队4节点,探索相邻节点5探索到的入队,登记map。
在这里插入图片描述
第六次循环:
出队5节点为终点终止循环探索结束。

总结

由上面第三次循环可以看出广度优先算法在节点距离不相等时(需要判断节点距离),需要修改所有经过被修改的节点(如循环三中2节点)的节点(如循环三中4节点),这样操作十分繁琐。其实这种节点间的关系更适合用Dijkstra算法来计算。
Dijkstra算法链接:https://blog.csdn.net/qq_33865609/article/details/117073021
以上文章作者通过上网查找资料自己思考总结而来,如有不足不吝赐教,谢谢。


http://chatgpt.dhexx.cn/article/5RCurA86.shtml

相关文章

C语言基于邻接表的图的深度优先、广度优先遍历

目录 1 深度优先(Depth_First Search) 2 广度优先(Broadth_First Search) 3 基于邻接表的深度优先、广度优先遍历 4 源代码示例 4.1 深度优先 4.2广度优先 假设有无向图G (V,E)&#xff…

数据结构之深度优先和广度优先遍历

文章目录 图为什么要有图图的常用概念邻接矩阵邻接表图的深度优先遍历深度优先遍历基本思想深度优先遍历算法步骤深度优先算法的代码实现 图的广度优先遍历广度优先遍历基本思想广度优先遍历算法步骤广度优先算法的代码实现图结构完整代码 图 为什么要有图 1)前面我们学了线性…

图的深度优先和广度优先遍历算法

编写一个程序,输出下面带权有向图的邻接表,并根据该邻接表,实现图的遍历运算,具体要求如下: (1)从顶点0开始的深度优先遍历序列(递归算法) (2)从顶点0开始的深度优先遍历序列(非递归算法) (3)从顶点0开始的广度优先遍历…

算法之深度优先、广度优先算法

目录 前言: 搜索算法: 广度优先搜索算法 深度优先搜索算法 问题:如何找出社交网络中某个用户的三度好友关系? 总结: 参考资料: 前言: 图这种数据结构经常用于表示一个社交网络&#x…

广度优先搜索与深度优先搜索

广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理、实现和应用。 深度优先搜索 图的深度优先搜索(Depth First Search),和树的先序遍历…

深度优先遍历与广度优先遍历

1、深度优先遍历(Depth First Search, 简称 DFS) 1.1、主要思路 从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所…

深度优先与广度优先

深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。 深度优先遍历: 选取一个节点开始,沿着一条路一直走…

深度优先遍历(DFS)和广度优先遍历(BFS)

深度优先遍历(DFS)和广度优先遍历(BFS) 图的遍历:所谓遍历,即是对结点的访问。一个图有多个结点,如何遍历这些结点,有两种访问策略: 深度优先遍历(Depth First Search, …

深度优先与广度优先的区别!

从深度优先和广度优先两个角度解决同一个问题 题目 从一号顶点开始遍历这个图,使用深度优先搜索和广度优先搜索的2种遍历结果 深度优先遍历的主要思想就是,首先以一个未被访问过的顶点作为起始顶点,沿着当前顶点的边走到未访问过的顶点&…

数据结构:图的遍历--深度优先、广度优先

图的遍历:深度优先、广度优先 遍历 图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。当然,每个顶点有且只能被访问一次。 在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式。这两种遍历方式对无…

深度优先搜索与广度优先搜索

算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。 图上的搜索算法,最直接的理解就是&#…

广度优先搜索和深度优先搜索

文章目录 1. 前言2. 广度优先搜索和深度优先搜索1)深度优先搜索2)广度优先搜索 3. 深度优先搜索算法框架1)二叉树深度优先搜索模板2)图深度优先搜索模板3)二维矩阵深度优先搜索模板 4. 广度优先搜索算法框架1&#xff…

深度优先和广度优先算法

1、深度优先算法 遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。 最后得出的结果为:ABDECFHG。 Python代码实现的伪代码如下: 2、广度优先算法: 遍历规则: 1)先访问完当…

深度优先搜索(DFS)和广度优先搜索(BFS)

代码随想录 深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方。这里拿一起讨论,方便比较。 先给大家说一下两者大概的区别: 如果搜索是以接近起始状态的程序依次…

算法:深度优先和广度优先(DFS,BFS)

一丶深度优先(DFS) 深度优先顾名思义: 就是往深的地方优先查找或遍历。 如图二叉树,想遍历树中所有结点可以用中序遍历,前序或后序。如果某一结点还有子结点就会往深处就是往下一结点,一直遍历直到最后一个结点没有子…

【算法】深度优先和广度优先

本文只是总结的相关概念,仅供自己复习,严禁转载,文末附有本文内容涉及的文章链接,请点开链接查看原文! (一)深度优先 深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法&am…

算法:深度优先遍历和广度优先遍历

什么是深度、广度优先遍历 图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。遍历过程中得到的顶点…

ms17010利用失败解决一则

没有反弹得到session并且提示如下: [-] 10.0.131.2:445 - Service failed to start, ERROR_CODE: 216 换了一个payload set payload windows/meterpreter/reverse_tcp set payload windows/x64/meterpreter/bind_tcp 就可以了。 如果遇到Unable to continue with i…

永恒之蓝MS17010复现

MS17010复现 靶机win7:192.168.41.150 攻击kali: 192.168.41.147 扫描 通过auxiliary/scanner/smb/smb_ms17_010模块扫描虚拟机是否存在ms17010漏洞 存在 拿shell 通过exploit/windows/smb/ms17_010_eternalblue 直接exp打,设置好参数和payload,window…

MS17010(永恒之蓝)漏洞利用与复现

MS17010(永恒之蓝)漏洞利用与复现 0X00简介 永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统…