算法--深度优先和广度优先
BFS广度优先搜索算法
本节参考视频深度优先搜索_哔哩哔哩_bilibili
树的广度优先搜索
如上图,对于一颗数,广度优先搜索就是一个节点出队时,它的所有子节点都要入队。相当于数的层序遍历。
1 | 第一步:1入队 |
图的广度优先搜索
对于一个图,图没有根节点的说法,从任意一个节点开始。如从2节点开始。
构造一个节点是否被访问的数组visited,开始时所有值都为false。为了便于理解,下标和数组id一致,从1开始计。
1 | 第一步:2入队,将visited[2]置为true; |
图通常由邻接表或者邻接矩阵存储,所以当我们要看一个节点的相邻节点时,用邻接矩阵存放的话就可以得到固定的遍历序列;但如果用边链表存储的话,这个边链表可以是随意排序的,所以遍历序列也不固定。
在复杂度上,空间复杂度是O(n),时间复杂度取决于图的存储方式,用邻接矩阵存储的话是O(n2),邻接表的存储是O(n+v)。
广度优先生成
按图的邻接矩阵广度优先的方式生成一颗树,那么从A出发,子节点是B,C,D,再看B没有子节点,看C有子节点E,所以生成的树如下图,且是唯一的。
按图的邻接表生成树,由于邻接表的形态不唯一,所以生成的树也不唯一。
DFS深度优先搜索
树的深度优先搜索
树的深度优先搜索和树的中序遍历类似,可以用递归或队列模拟,非常简单,这里略过。
图的深度优先搜索
图的深度优先搜索需要辅助队列,固定的邻接矩阵或者邻接表。如上图,那么它的顺序如下:
1 | 第一步:假设从3开始,3入栈,[3]; |
深度优先生成
有向图遍历
- 标题: 算法--深度优先和广度优先
- 作者: Huang Zhiwei
- 创建于: 2023-04-25 20:35:57
- 更新于: 2023-09-02 23:05:20
- 链接: https://huangzhw0221.github.io/2023/04/25/Algorithm-深度广度优先搜索/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论