Kruskal算法求解最小生成树
最小生成树是一个连通图。什么是连通图,(强)连通图详解前面介绍了《图存储结构》,本节继续讲解什么是 连通图 。 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3http://c.biancheng.net/view/3405.html
Kruskal算法的图形分析:
从下面的有权图中找出最小生成树:Kruskal算法是一种贪心算法,也是取边法,首先取出权值最小的边AC,再在剩下的边中依次取出权值最小却不会形成环的边。
①取出AC
②取出AB或者AD
③取出AB或者AD剩下的一个,上面取了AB,则取AD
④再下来最下的权值是边BC或者CD的权值为3,但当加入其中一条边回形成环,不满足,舍去,接着往下找剩下权值最小的边
⑤取出AE或者BE其中一条(直到这里就完成了,边数n为顶点数减1),这里你把AE边换成BE边也是可以的,所以说最小长生树不唯一
Kruskal算法的核心步骤:
①、权值从小到大进行排序
②、比较根结点是否相同(判断是否形成环)
对第②点进行解释一下,用辅助数组来记录每个顶点的根结点,一开始他们都是独立的一棵树,根结点是自己本身,初始值如下
当加入第一条权值最小边AC时,将终点顶点C看成时开始点顶点A的孩子,也就是C的根结点由原来指向自己到现在指向A,值由原来的2更新为0
加入第二条权值最小的边AB,B的根结点值更新为0
加入第三条权值最小的边AD,D的根结点值更新为0
在加入第四条权值最小的边BC或者CD时,其中B和C的根结点都是0,或者C和D的根结点值都是0,形成了环,所以舍去,依次下去,直到形成最小生成树为止。
接下来就是代码了:
红色方框时核心的算法
排序前的边集数组:(根据输入的顺序)
进行排序后的边集数组:
Kruskal算法求解最小生成树相关推荐
- ds图—最小生成树_Java: Kruskal算法生成最小生成树(邻接矩阵)
Java: Kruskal算法生成最小生成树(邻接矩阵): package 输出: Kruskal=36: (E,F) (C,D) (D,E) (B,F) (E,G) (A,B) 分析: Java: ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- C语言实现克鲁斯卡尔Kruskal算法求最小生成树(附完整源码)
Kruskal算法求最小生成树 Edge结构体,Graph结构体 Kruskal算法求最小生成树完整源码(定义,实现,main函数测试) Edge结构体,Graph结构体 // a structure ...
- 作业1-采用Prim算法和Kruskal算法构造最小生成树
采用Prim算法和Kruskal算法构造最小生成树 实验报告 1.问题 2.解析 (1)Prim算法 (2)Kruskal算法 3.设计 (1)Prim算法 (2)Kruskal算法 4.分析 (1) ...
- 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
点击上方蓝字,和我一起学技术. 今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树. 我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼. ...
- 最小生成树 kruskal_使用Kruskal算法求解Java最小生成树问题
最小生成树 kruskal In Electronic Circuit we often required less wiring to connect pins together. We can m ...
- 采用Kruskal算法生成最小生成树,并采用并查集的合并优化和查询优化。
文章目录 最小生成树 1.什么是图的最小生成树(MST)? 2.最小生成树用来解决什么问题? Kruskal(克鲁斯卡尔)算法 算法描述 图解 最小生成树 1.什么是图的最小生成树(MST)? 用N- ...
- 普利姆算法和克鲁斯卡尔算法求解最小生成树
Q:最小生成树有什么用? A:譬如我要去五个城市旅游,每两个城市之间可能有路也可能没有,路的距离可能一样也可能不一样,随机从一个城市出发,我想要把每个城市走一遍,怎么样走过的路距离最短,比如我想从上海 ...
- Kruskal算法构造最小生成树
问题[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)] 在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) ...
最新文章
- 将php-fpm添加至service服务
- spring集成kafka
- 提升CUDA程序运行效率的几个关键点
- JavaScript学习笔记06【高级——JavaScript中的事件】
- windows:QtCreator调用库的方式
- Oracle意外赢官司,程序员或过苦日子
- 微服务启动顺序_微服务框架Demo.MicroServer运行手册
- 虚拟机中的linux系统无法获得ip(ifconfig命令无法查到ip)
- 黑马程序员c++讲义课件笔记
- 0基础可以考CPDA数据分析师证书吗
- 我要表白网HTML+CSS+JS-最浪漫的表白网页在线生成网站
- Android 百分比布局库(percent-support-lib) 解析与扩展
- ibm aix_IBM AIX设备驱动程序开发
- 二战企*查*查-企业-数-据爬虫
- 微信支付(扫码支付)微信公众平台开发教程(6)
- python:calendar 日历相关库
- 数值分析学习(一)之交叉法(Bracketing Methods)求根
- python之pypinyin
- Spring Boot 1.5.10项目引入knife4j接口文档
- 《Redis学习三之面试》