克鲁斯卡尔算法

用于得到最小生成树

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

概念梳理:

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容