图--最小生成树(kruskal)

    最小生成树的另一种实现方式:prim

核心

    选边

注意点

    避免回路

图示

(如果把生成树的过程比作旅游,prim则是边走边确定下一站,kruskal则是触发前就规划好)

JavaScript代码实现

    使用边集数组存储图

    对边按权值进行排序

    判断是否存在回路

            假设回路为A-F-C

(每次循环结束合并一次,下次若为同起点则映射到合并后的位置,如af结束后将a合并到f,下次的ac找的其实是fc)

            第一次找到AF边,找到的位置为A:0,F:5,不相等,更新p,此时p=[5,0,0,0,0,0]

            第二次找到AC边,找到的位置为A:5,C:2,此时AC相当于CF,由于不等,更新p,此时p=[5,0,0,0,0,2]

            第三次找到FC边,找到的位置为F:2,C:2,此时FC相当于CC,重合

    完整算法如下

你可能感兴趣的:(图--最小生成树(kruskal))