数据结构实验之图论九:最小生成树_数据结构与算法之—最好学的最小生成树...

数缺形时少直观,形缺数时难入微。
——华罗庚

最小生成树问题是我在各项图论问题中最先理解与解决的,其目的就是在连通图中选择出:

使得各点构成联通的最小边权的边集

其中用到的数据结构与算法也是相对很好理解的并查集Kruskal算法,我在我之前的文章

小话数据结构-图 (聚焦与于实现的理解)

也有提到过,现在再来系统的阐述一下这问题的解决思路。

并查集

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题

并查集是一个写法简单,经常使用到的数据结构,主要操作有以下三种

初始化操作

int 

查找函数

int 

合并操作

p

并查集还可以维护每一个子集的大小、或是自子集到祖宗节点的距离,给出以下代码,只是使用Kruskal算法只需要使用朴素的并查集就可以了。

int 

Kruskal算法【O(mlogm)】

这个顶着一个高端名字的针对解决最小生成树的算法,也就是一个彻头彻尾的贪心思想的算法,基本的步骤如下

①:将所有边按照权值从小到大排序

②:将所有边依次放入图中,如果没有连入新的点,则丢弃不要。

③:当整个图联通时,返回结果

这里给出一张别人博客里非常直观的动图

98182298ccd1f8fa893525bc9757b7fc.png

在②步骤中,并查集就可以发挥出其作用,快速的判定出当前选择的边的点是否在一个集合中,从而方便的实现算法。

那我们直接用代码来实现:

int 

至此,kruskal算法就成功实现了,可以根据实际情况改变部分参数,从而获得需要求解的部分。

希望我的抛砖引玉能引起更多的思考 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值