【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1.首先举个实例来说明连通性,看下图:
图G1
上图为非连通图,对上图的连接表进行深度优先搜索遍历,3次调用DFS过程,分别从顶点A,D,G出发,得到的顶点访问序列为:
A L M J B F C D E G I K H
上面的3个顶点集和所有依附于这些顶点的边,便构成了非连通图的3个连通分量。
2.设E(G)为连通图G中所有边的集合,则从图中任一顶点出发遍历图时,必定将E(G)分成两个集合T(G)和B(G),其中T(G)是遍历图过程中历经的边的集合;B(G)是剩余边的集合。显然T(G)和图中所有的顶点一起构成连通图G的极小连通子图,又成为连通图的一颗生成树,并且称由深度优先搜索得到的为深度优先生成树;由广度优先搜索得到的为广度优先生成树。
对于非连通图,每个连通分量中的顶点集,和遍历走过的边一起构成若干颗生成树,这些连通分量的生成树组成非连通图的生成树林。
上图G1的深度优先生成树林为:
3.深度优先生成森林的算法
来源:oschina
链接:https://my.oschina.net/u/2263272/blog/1610088