最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。
Prim算法过程:
一条边一条边地加, 维护一棵树。
一条边一条边地加, 维护一棵树。
初始 E = {}空集合, V = {任选的一个起始节点}
循环(n – 1)次,每次选择一条边(v1,v2), 满足:v1属于V , v2不属于V。且(v1,v2)权值最小。
E = E + (v1,v2)
V = V + v2
最终E中的边是一棵最小生成树, V包含了全部节点。
以下图为例介绍Prim算法的执行过程。


选中边AF , V = {A, F}, E = {(A,F)}

选中边FB, V = {A, F, B}, E = {(A,F), (F,B)}

选中边BD, V = {A, B, F, D}, E = {(A,F), (F,B), (B,D)}

选中边DE, V = {A, B, F, D, E}, E = {(A,F), (F,B), (B,D), (D,E)}