克鲁斯卡尔算法

用于得到最小生成树

时间复杂度:由每次选择最小权值边的算法(一般来说,这里用排序算法将边排列好)而定。

概念梳理:

  • 使用贪心的原则选择下一条边
  • 使用到了并查集
  • 针对无向图
  • 适用于稀疏图

算法需要:
所有边的长度(这里不推荐邻接矩阵,最好是边的集合)
并查集数组DSU[]和并查集中查找根节点函数findRoot

描述下步骤:
初始化:
初始化并查集数组
初始化边的数组,我在写的时候使用二维数组edges[n][3],n为边数,列中,第一、二列存放点,第三列存放边的权值
对边的数组进行排序
用sum来记录最小生成树的权值。

算法正式开始:
遍历排序好的数组:
查看a、b是否在一个并查集里,即边的两个顶点是否在当前的最小生成树里
不在,那么修改并查集,sum=sum+边的权值,

当然,这里遍历完了所有的边,实际上,我觉得可以设置一下,在当前生成树的顶点已经是给出的所有顶点的时候,可以终止遍历

总结:算法有使用到并查集,这个概念还是值得深入了解一下的

你可能感兴趣的:(克鲁斯卡尔算法)