问题描述
我知道解决这个问题的蛮力方法,可以给出:
- 遍历所有边
- 取一组(或列表)(假设 s)
- 如果向 s 添加边不会形成循环,则向 s 添加边
- 如果所有边的迭代都完成,则结束。
但我想要一个有效的解决方案(时间+空间)来解决这个问题。
所以,任何帮助将不胜感激.......
解决方法
假设图是连通的(否则不存在生成树):从任意一个顶点开始,在图中执行depth-first search,记录每个顶点是否已经被访问过,并将每条边输出到一个您遇到的未访问顶点。这些边构成一棵生成树,因为它们是无循环的并且访问每个顶点。
这需要 O(|V|+|E|) 时间和 O(|V|) 空间。