数据结构之图(遍历广度优先BFS和深度优先DFS)

广度优先遍历(BFS)

树的广度优先遍历(层序遍历)和图的广度优先遍历的关系

树的广度优先遍历是层序遍历
从根节点横着一排一排遍历
找与其相邻的节点!找对应节点的孩子
在这里插入图片描述
图的广度优先遍历
也是找对应的连接的节点
不过
与树不同
过程中可能出现重复
在这里插入图片描述

代码实现

在这里插入图片描述

在这里插入图片描述
如果v是对应G的最后一个临边节点的话返回-1
可以退出循环
在这里插入图片描述
也是一个入队出队就是多加了个标记
这就是广度优先遍历

分析遍历序列

从2开始
在这里插入图片描述
对应的图出现对应遍历序列
在这里插入图片描述
可以手算
从1开始的话2,5最近
这里用邻接矩阵实现的话
离最近的有两个的话是按照
从小到大排序的
就是1 2 5
队列为2 5(1出栈)
然后访问2旁边的节点为6
队列变为 5 6(2出栈)
访问5没有
队列 6
访问6
3 7
访问3
7 4
访问 7
4 8
都访问过了最后4和8出队
对应的出队序列的话 就是访问顺序呗
1 2 5 6 3 7 4 8

邻接表存储变遍历序列的可变性

如果不是邻接矩阵存储的话是邻接表的话
对应的数组可能有多种情况
在这里插入图片描述
比如图中上面的话是2 1 6
下面的话就是 2 6 1了(排序不同)

算法存在问题(连通和非连通)

在这里插入图片描述
如果是非连通图的话,9-10-11这几个就都遍历不到

思路就是我们遍历一遍
visite数组找看还有没有对应是false的值
有的话
吧对应的节点再进行一次BFS()遍历

BFS算法(final版)

在这里插入图片描述

对于无向图来说,调用BFS的次数=连通分量数(极大连通子图)

复杂度分析

空间复杂度
队列最大长度
在这里插入图片描述
时间复杂度主要来自于访问顶点和各条边
邻接矩阵的话1.访问各顶点O(|V|)2.访问各条边需要对对应矩阵进行遍历就是O(|V^2|)
O(|V^2|)+O(|V|)省去O(|V|)
,结果为O(|V^2|)
邻接表的话
就是访问各个顶点和边就ok
O(|V+E|)
在这里插入图片描述

广度优先生成树

你在遍历的时候
通过一条边访问对应的节点
最后是没有回路的把没有访问的边都去掉就生成了一颗
树(这棵树被称为广度优先生成树)

在这里插入图片描述

这里的结果是邻接矩阵还有邻接表按顺序存储节点
若3和7调换
在这里插入图片描述
就是先过7了
7 4 8
可以把4节点和8节点全访问一遍
就用不到3了
注意:先访问的放左子树,后访问的放右子树

广度优先生成树邻接表的话,不唯一
在这里插入图片描述

广度优先生成森林

对于非连通表的连通分量搞广度优先树的操作就是广度优先生成森林
在这里插入图片描述

练习:有向图的BFS过程

在这里插入图片描述

总结

在这里插入图片描述

图的深度优先遍历(DFS)

树的深度优先遍历(先根遍历)

因为图的深度优先类似于树的先根遍历这里我们举例先根
在这里插入图片描述
还是一样新找到的节点可能是访问过的
还是要多加一个标记数组

分析

在这里插入图片描述
这里多添的是一个栈奥,这是系统栈(不用自己添加)我们只是分析编译器递归过程

如图奥
从2开始遍历1 和 6
1比较近先访问1,然后访问1的子节点5
5的话相邻的1被访问过了,5和1出栈剩2
然后就再访问2节点
发现6
6发现3 和 7
先3 3后面是4
然后4 和3返回
到7
7 8
最后8和7再返回
然后6和2返回
栈空
在这里插入图片描述

DFS算法(Fianl版)

还是那个问题奥
就是非连通图
还是遍历我们那个标记数组呗

在这里插入图片描述

复杂度分析

空间复杂度
在这里插入图片描述

没有说明答最坏情况

时间复杂度和广度优先是类似的

在这里插入图片描述

深度优先遍历序列

还是有多种可能性奥
如果邻接表就是递增存放的话和邻接矩阵一样
邻接表不一样就不一样呗具体情况具体分析
在这里插入图片描述
这种是不按递增存储自己练习一下
在这里插入图片描述
主要想强调的是不唯一性

在这里插入图片描述

深度优先生成树

和广度优先生成树差不多
也是只保留我们访问过的边
生成一棵树
也是邻接表存储不一样生成树不一样
在这里插入图片描述
在这里插入图片描述

深度优先生成森林

不连通的图
对连通分量进行深度优先生成树
最后出来就是深度优先森林喽
在这里插入图片描述

总结

在这里插入图片描述

遍历的图的连通性

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值