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 }
。。。。。