Kruskal算法求解最小生成树

这篇具有很好参考价值的文章主要介绍了Kruskal算法求解最小生成树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最小生成树是一个连通图。什么是连通图,(强)连通图详解前面介绍了《图存储结构》,本节继续讲解什么是 连通图 。 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3http://c.biancheng.net/view/3405.html

Kruskal算法的图形分析:

从下面的有权图中找出最小生成树:Kruskal算法是一种贪心算法,也是取边法,首先取出权值最小的边AC,再在剩下的边中依次取出权值最小却不会形成环的边。

Kruskal算法求解最小生成树

①取出AC

Kruskal算法求解最小生成树

②取出AB或者AD

Kruskal算法求解最小生成树

③取出AB或者AD剩下的一个,上面取了AB,则取AD

Kruskal算法求解最小生成树

④再下来最下的权值是边BC或者CD的权值为3,但当加入其中一条边回形成环,不满足,舍去,接着往下找剩下权值最小的边

Kruskal算法求解最小生成树

 ⑤取出AE或者BE其中一条(直到这里就完成了,边数n为顶点数减1),这里你把AE边换成BE边也是可以的,所以说最小长生树不唯一

Kruskal算法求解最小生成树

Kruskal算法的核心步骤:

①、权值从小到大进行排序

②、比较根结点是否相同(判断是否形成环)

对第②点进行解释一下,用辅助数组来记录每个顶点的根结点,一开始他们都是独立的一棵树,根结点是自己本身,初始值如下

Kruskal算法求解最小生成树

当加入第一条权值最小边AC时,将终点顶点C看成时开始点顶点A的孩子,也就是C的根结点由原来指向自己到现在指向A,值由原来的2更新为0

Kruskal算法求解最小生成树

加入第二条权值最小的边AB,B的根结点值更新为0

Kruskal算法求解最小生成树 

加入第三条权值最小的边AD,D的根结点值更新为0

Kruskal算法求解最小生成树

在加入第四条权值最小的边BC或者CD时,其中B和C的根结点都是0,或者C和D的根结点值都是0,形成了环,所以舍去,依次下去,直到形成最小生成树为止。

Kruskal算法求解最小生成树

 接下来就是代码了:

红色方框时核心的算法

Kruskal算法求解最小生成树

排序前的边集数组:(根据输入的顺序)

Kruskal算法求解最小生成树

进行排序后的边集数组:

Kruskal算法求解最小生成树 

 文章来源地址https://www.toymoban.com/news/detail-469851.html

 

到了这里,关于Kruskal算法求解最小生成树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 859. Kruskal算法求最小生成树

    给定一个 nn 个点 mm 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出  impossible 。 给定一张边带权的无向图 G=(V,E)G=(V,E),其中 VV 表示图中点的集合,EE 表示图中边的集合,n=|V|n=|V|,m=|E|m=|E|。 由

    2023年04月09日
    浏览(30)
  • 图的最小生成树-Kruskal算法

    目录 问题引入  程序设计  程序分析 本节文章 【问题描述】 编写程序,利用带权无向图的邻接矩阵存储,实现图的最小生成树Kruskal算法。

    2024年02月08日
    浏览(50)
  • 最小生成树—Kruskal算法和Prim算法

    连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点 和n-1条边。 最小生成树:构成生成树的

    2024年02月05日
    浏览(36)
  • 最小生成树算法之Kruskal算法(c++)

    与Prim算法生成图的最小生成的树算法不同在于: Prim算法是基于图中的顶点的,且不依赖于边,Prim从顶点出发拓展,依次找每个顶点相邻的权值最小的边,直至生成最小生成树。因此,Prim算法的时间复杂度是O(v^2),适合边稠密图。 而Kruskal算法恰恰相反,是基于图中的边的一

    2024年02月12日
    浏览(33)
  • 最小生成树(Prim算法与Kruskal算法)

    一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树,但③是构造连通网的最小代价,所以③是该图的最小生成树。 P

    2024年02月05日
    浏览(50)
  • 图论13-最小生成树-Kruskal算法+Prim算法

    基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中 不产生 回路,直至森林变成一棵树为止。 2.2.1 如果图不联通,直接返回空,该

    2024年02月01日
    浏览(37)
  • 最小(代价)生成树—Prim算法与Kruskal算法

    目录  一、最小生成树的特点 二、最小生成树算法  ① Prim(普里姆)算法 ②Kruskal(克鲁斯卡尔)算法  ③Prim算法与Kruskal算法对比 最小生成树是带权连通图G=(V,E)的生成树中边的权值之和最小的那棵生成树。它具有以下特点: 图G中各边权值互不相等时有唯一的最小生成树。图

    2024年02月01日
    浏览(30)
  • 最小生成树Kruskal、Prim算法C++

    连通图: 在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树: 一个连通图的最小连通子图称作为图的生成树。有 n个顶点 的连通图的生成树有 n个顶点和 n-1 条边。 最小生成树: 最小生活

    2024年02月10日
    浏览(33)
  • 最小生成树matlab代码Kruskal算法,用于二维网络生成

    一、 Kruskal算法         克鲁斯卡尔算法(Kruskal)是一种使用贪婪方法的最小生成树算法。 该算法初始将图视为森林,图中的每一个顶点视为一棵单独的树。 一棵树只与它的邻接顶点中权值最小且不违反最小生成树属性(不构成环)的树之间建立连边。 二、具体效果   最

    2024年02月13日
    浏览(43)
  • 【最小生成树】一文学懂prim、kruskal算法

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: 算法 ;该专栏专注于蓝桥杯和ACM等算法竞赛🔥 近期目标: 写好专栏的每一篇文章 首先,我们要了解什么是最小生

    2023年04月25日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包