深度优先生成树和广度优先生成树的详解版
其实在对无向图进行遍历的时候,遍历过程中所经历过的图中的顶点和边的组合,就是图的生成树或者生成森林。
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121214557904-1670902542.png)
图 1 无向图
例如,图 1 中的无向图是由 V1~V7 的顶点和编号分别为 a~i 的边组成。当使用深度优先搜索算法时,假设 V1 作为遍历的起始点,涉及到的顶点和边的遍历顺序为(不唯一):
此种遍历顺序构建的生成树为:
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121214954420-1496485200.png)
图 2 深度优先生成树
由深度优先搜索得到的树为深度优先生成树。同理,广度优先搜索生成的树为广度优先生成树,图 1 无向图以顶点 V1 为起始点进行广度优先搜索遍历得到的树,如图 3 所示:
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121215014603-471598575.png)
图 3 广度优先生成树
非连通图中,多个连通分量构成的多个生成树为非连通图的生成森林。![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121215034214-1251859773.png)
图 4 深度优先生成森林
例如,对图 4 中的非连通图 (a) 采用深度优先搜索算法遍历时,得到的深度优先生成森林(由 3 个深度优先生成树构成)如 (b) 所示(不唯一)。
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121214557904-1670902542.png)
图 1 无向图
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121214940502-1458083407.png)
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121214954420-1496485200.png)
图 2 深度优先生成树
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121215014603-471598575.png)
图 3 广度优先生成树
非连通图的生成森林
非连通图在进行遍历时,实则是对非连通图中每个连通分量分别进行遍历,在遍历过程经过的每个顶点和边,就构成了每个连通分量的生成树。非连通图中,多个连通分量构成的多个生成树为非连通图的生成森林。
深度优先生成森林
![](https://img2022.cnblogs.com/blog/2913859/202211/2913859-20221121215034214-1251859773.png)
图 4 深度优先生成森林