Prim - Prim 算法


问题

用Prim算法求无向图的最小生成树。

解法

Prim算法是一种贪心算法,按照以下步骤操作:

初始时设生成树为空,边集合为,点集合为。将任意顶点作为初始顶点加入生成树的点集合中,得到

的所有临边(生成树的临边是一个顶点属于生成树,另一个顶点不属于生成树的边)中找到权值最小的临边。设边,将该边加入生成树中:将顶点加入生成树点集合,将边加入生成树边集合

重复上述操作,直到为止,算法结束。这时即为无向图的最小生成树。

Prim1.png

上图演示了无向图使用Prim算法求最小生成树的过程,从顶点开始。需要注意每次选择新的边时,是从的所有顶点的临边中选择,不是仅仅从最近一个访问的顶点的临边中选取。

Prim算法的时间复杂度为,其中表示平均每个顶点的邻节点数量。


Introduction To Algorithms


源码

Prim.h

Prim.cpp

测试

PrimTest.cpp