acm-最小生成树(prim)

来源:互联网 发布:淘宝网宝宝学步鞋 编辑:程序博客网 时间:2024/06/07 08:55

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
原创粉丝点击