从概念上讲,生成树生成林有什么区别?

另外,是否可以通过 DFS BFS 遍历来构造生成森林?为什么?如何?

我了解生成树,但是找不到有关生成林的任何明确解释。即使是Wikipedia(https://en.wikipedia.org/wiki/Spanning_tree),也没有给出明确的定义。
我的书(数据结构和算法,Wiley-第六版)也没有关于跨越森林的定义。

我想知道,如果我们有一个包含三个连接组件的图形,是否可以通过DFS/BFS遍历构造一个生成林?

最佳答案

当您的graph中只有一个连接的组件spanning tree = spanning forest时,即为connected components

但是,当图形中有多个connected components时。例如,在下图中,我们有 3 component:

algorithm - 生成树VS。跨越森林-LMLPHP

因此,对于每个spanning tree,我们将有一个spanning trees,所有 3 spanning forest都将构成connected component


是的,有可能。当只有1个BFS时,您的DFSspanning tree (which in this case is equal to spanning forest)将终止访问所有顶点,并且您将获得connected component

但是,当您有超过1个BFS时(如图片中所示),您唯一需要做的就是从未访问的顶点开始另一个DFSBFS。当没有且未访问顶点时,算法将终止,并且每个DFSspanning tree遍历都会产生一个ojit_code。

09-06 14:06