图论(十)最小生成树-Prim算法

前面说过,Prim算法是从顶点着手构建最小生成树的。应该说,Prim算法比Kruskal更简单。我们还是以前面的乡镇假设光纤网络为例:


Prim算法工作步骤

(1) 构建全部顶点集V,选取初始顶点,加入顶点集U。

构建顶点集V={a,b,c,d,e,f,g,h,i},从中选取任意一个顶点。我们假设从顶点a开始。将a加入到顶点集U={a}中。

(2) 找U中顶点与V-U中顶点的所有边。

 

U中顶点只有a,V-U={b,c,d,e,f,g,h,i},则U中顶点与V-U中顶点的所有边为a-b和a-f,图中紫色边。U中顶点为绿色背景顶点,V-U中顶点为黑色背景顶点。

(3) 选取所有边中的最短边加入最小生成树。


所有边a-b和a-f中的最短边a-b,将其加入最小生成树(图中绿色边)。

(4) 将最短边另一头的顶点,加入顶点集合U。

最短边a-b的另一头顶点为b,将b加入到U={a,b}。


(5) 继续找U中顶点与V-U中顶点的所有边。

此时,U={a,b},V-U={c,d,e,f,g,h,i},则U与V-U中顶点所有边为a-f, b-c, b-g,b-h。图中紫色边所示。


(6) 继续选取最短边,将最短边加入最小生成树,并将最短边另一头顶点加入U。

此时最短边为a-f,将最短边加入最小生成树,并将最短边顶点f加入U={a,b,f}。此时V-U={c,d,e,g,h,i}。

 

(7) 如此循环反复,直至U=V。

下面是按顺序的U和V-U以及最小生成树的变化过程:

 

                              U={a,b,f,g};V-U={c,d,e,h,i}                                                   U={a,b,f,g,h};V-U={c,d,e,i}

 

 

                              U={a,b,c,f,g,h};V-U={d,e,i}                                                    U={a,b,c,f,g,h,i};V-U={d,e}

 

  

                             U={a,b,c,e,f,g,h,i};V-U={d}                                                      U={a,b,c,d,e,f,g,h,i};V-U={}

 

为什么不会构成环

因为我们在寻找边时,只是找U与V-U中顶点所构成的边,而U中内部顶点的边是不会找的。找到最短边后,直接将另一头顶点加入U了,也就是说这两个顶点都在U中了,即使这2个顶点还有其他路径,后面都不会再找,也就不会构成回路了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值