acm-最小生成树(prim)

prim方法的具体过程及参数解释

low[] 数组存储当前顶点和其他相连顶点的权重,未相连初始化INF(无限)

visited[]数组存所有节点的访问状态 


prim方法过程

 随机初始化第一个访问点pos(一般选取pos = 0)

 设置visited[pos]为已访问

 初始化low数组存储pos顶点到其他顶点的权重(未相连初始化INF)

 loop n-1:        //最小生成树n个顶点需要n-1条边

将map[pos]当前行存入low[]

找出low[i]为最小值(即pos到其他相连顶点中的最小权重)

标记i为已经访问 pos =i

将map[pos]当前行中未标记的权值存入low[](map[pos]<low[i]) // 注释 0x1

end loop

注释 0x1 解释

map[pos]<low[i]的必要性

在 注释 0x1处 low[]存储的是和已访问顶点相连但未归入最小生成树的边的并集


       

如图 假设AD为已经访问的顶点 那么与红线相交的线会被存储进low[] 但是9>7 则bd这条线将不会存储进去,这样防止了构成回路 low[] = {AB AD DF DE }


再经过一次循环

DF会被归入最小生成树 

FE会替换DE在low[]中的位置  low[] = {AB AD DF EF FG }


再经过一次循环

AB会被归入最小生成树 

BE会替换FE在low[]中的位置  low[] = {AB AD DF BE FG BC }

。。。。。



ph~


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值