从概念上讲,生成树和生成林有什么区别?
另外,是否可以通过 DFS 或 BFS 遍历来构造生成森林?为什么?如何?
我了解生成树,但是找不到有关生成林的任何明确解释。即使是Wikipedia(https://en.wikipedia.org/wiki/Spanning_tree),也没有给出明确的定义。
我的书(数据结构和算法,Wiley-第六版)也没有关于跨越森林的定义。
我想知道,如果我们有一个包含三个连接组件的图形,是否可以通过DFS/BFS遍历构造一个生成林?
最佳答案
当您的graph
中只有一个连接的组件spanning tree = spanning forest
时,即为connected components
。
但是,当图形中有多个connected components
时。例如,在下图中,我们有 3 component
:
因此,对于每个spanning tree
,我们将有一个spanning trees
,所有 3 spanning forest
都将构成connected component
是的,有可能。当只有1个BFS
时,您的DFS
或spanning tree (which in this case is equal to spanning forest)
将终止访问所有顶点,并且您将获得connected component
。
但是,当您有超过1个BFS
时(如图片中所示),您唯一需要做的就是从未访问的顶点开始另一个DFS
或BFS
。当没有且未访问顶点时,算法将终止,并且每个DFS
或spanning tree
遍历都会产生一个ojit_code。