【算法总结】图论-最小生成树

【算法总结】图论-最小生成树

一、概念

在一个无向连通图中,如果存在一个连通子图包含原图中所有的结点和部分边,且这个子图不存在回路,那么我们称这个子图为原图的一棵生成树。在带权图中,所有的生成树中边权的和最小的那棵(或几棵)被称为最小生成树

定理:在要求解的连通图中,任意选择一些点属于集合A,剩余的点属于集合B, 必定存在一棵最小生成树包含两个顶点分别属于集合 A 和集合 B 的边(即连通两个集合的边)中权值最小的边。 

二、Kruskal算法

1.初始时所有结点属于孤立的集合。

2.按照边权递增顺序遍历所有的边,若遍历到的边两个顶点仍分属不同的集合(该边即为连通这两个集合的边中权值最小的那条)则确定该边为最小生成树上的一条边,并将这两个顶点分属的集合合并。

3.遍历完所有边后,原图上所有结点属于同一个集合则被选取的边和原图中所有结点构成最小生成树;否则原图不连通,最小生成树不存在。

如步骤所示,在用Kruskal算法求解最小生成树的过程中涉及到大量的集合操作,我们恰好可以使用上一节中讨论的并查集来实现这些操作。

猜你喜欢

转载自www.cnblogs.com/yun-an/p/11087447.html
今日推荐