一,Prim算法的思想
Prim算法和Kruskal算法一样对安全边的选择规则作出了细化,Prim每一步在连接集合A和A之外的结点的所有边中选择一条轻量边的结点信息加入A中,直到A中的结点覆盖所有结点。
二,Prim算法介绍
准备阶段:一张赋值无向连通图,集合A用于存放最小生成树的各结点信息,每个结点有两个属性:key表示该结点的所有前驱结点到它的最短距离,π表示到它距离最短的前驱结点,我们还需要一个初始为所有结点的队列Q
算法过程:每次从队列Q中提取key值最小的结点加入集合A,遍历他的邻结点,如果邻结点在队列Q中且w(u,v)<v.key,那么更新结点的信息,直到所有结点从队列Q中取出,最后根据根结点及其他结点的π值,形成最小生成树
三,Prim算法伪代码
MST_PRIM(G,w,r)
1. for each u∈G.V
2. u.key=∞
3. u.π=NULL
4. r.key=0
5. Q=G.V
6. while Q≠∅
7. u=EXTRACT_MIN(Q)
8. for each v∈G.Adj[u]
9. if v∈Q and w(u,v)<v.key
10. v.π=u
11. v.key=w(u,v)
第1-3行中,将每个结点的key和π进行初始化;第4-5行中,根结点的key初始化为0,队列Q初始化为所有