最小生成树 —— Kruskal 克鲁斯卡尔算法

目录

一、Kruskal 算法简介

1.1 Kruskal 算法思想

1.2 Kruskal 过程图解

1.3 Kruskal 两个核心问题

1.4 适用场景(Kruskal 与 Prime 的比较)

二、Kruskal 的实现

2.1 头文件

2.2 函数文件

2.3 主函数(数据测试)


一、Kruskal 算法简介

1.1 Kruskal 算法思想

Kruskal(克鲁斯卡尔)算法是一种用来在加权连通图中寻找最小生成树的算法,其操作对象是

Kruskal 思想

        1. 从加权图中找出所有的边;初始时,所有边都不属于最小生成树,最小生成树为\o\phi

        2. 从不属于最小生成树的边中找到权值最小的边,判断最小边及其连接的两个顶点加入到最小生成树是否会形成环路

         a)若不形成环路,则将此最小边及其连接的顶点并入最小生成树;

         b)若形成环路,则永远不再看此边,然后从剩下的且不属于最小生成树的边中,寻找权值最小的边。

        3. 重复上述步骤,直至所有顶点均连接在一起,并没有形成环路时,最小生成树就找到了。

1.2 Kruskal 过程图解

举例:

 

  

 

 

1.3 Kruskal 两个核心问题

问题1  如何寻找权值最小的边

        应对策略:对图的所有边按照权值大小进行排序,然后按从小到大的顺序取出边。

                *在这里,通常定义一种存储边及其连接的顶点的结构体数组。

问题2  如何判断边及其顶点加入最小生成树是否会形成回路。

        应对策略:每条边机及其相连的顶点都视作一颗子树,然后判断这课子树的根是否和最小生成树的根相同;若相同,则会形成回路;若不同,则不会形成回路,将子树并入最小生成树。

1.4 适用场景(Kruskal 与 Prime 的比较)

1. Kruskal 算法 是将边作为操作对象,当加权图的边越多,要处理的边也越多,则算法的时间复杂度就越高;而顶点的数量对算法的时间复杂度无影响。所以,Kruskal 算法适合处理稀疏图(边较少的图)。时间复杂度:O(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值