算法步骤:
初始化:向空树T = (VT,ET)中添加图G = (V,E)的任何一个顶点u0,VT = {u0},ET ≠ ∅;
循环(重复直到VT = V):从图G中选择满足{(u,v)|u∈VT,v∈V-U}且具有最小权值的边(u,v),修改VT,ET集合,VT = VT∪{v},ET = ET ∪ {(u,v)};
//Prim算法
void Prim(G,T)
{
T = NULL; //初始化空树
U = {w}; //添加任一顶点w
while((V-U) != 0)//树还没有拿到全部结点
{
MinEdge = (u,v);//u是U中结点,v是V-U中结点
T = T + (u,v); //边加入树
U = U + v; //点加入树
}
}
算法的时间复杂度是O(V^2),不依赖边集。
适用场景:边稠密的图。