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

克鲁斯卡尔算法是一种采用边贪心策略构建最小生成树的算法,简单易懂。首先对所有边按权重排序,然后依次选择未连接的最小权重边,利用并查集判断连接的顶点是否在同一连通块。重复此过程直到边数等于顶点数减一或遍历完所有边。若最后边数不足,说明图不连通。在稠密图中使用Prim算法,稀疏图则选用Kruskal算法。
摘要由CSDN通过智能技术生成

kruskal(克鲁斯卡尔)算法,采用了边贪心的策略,其思想及其简洁,理解难度比prim要低很多。

kruskal算法的基本思想为:在初始状态时隐去图中的所有边,这样图中每个顶点都自成一个连通块。之后执行下面的步骤:

① 对所有边按边权从小到大进行排序。

② 按边权从小到大测试所有边,如果当前测试边所连接的两个顶点不在同一个连通块中,则把这条测试边加入当前最小生成树中;否则,将边舍弃。

③ 执行步骤②,直到最小生成树中的边数等于总顶点数减1 或是 测试完所有边时结束。而当结束时如果最小生成树的边数小于总顶点数减1,则说明该图不连通。

 

具体实现(用语言描述):

1. 首先定义一个结构体,在里面存放边的两个端点编号和边权,将该结构体定义成边。

2. 然后对所有边按照边权从小到大进行排序。

3.枚举所有边,在此利用并查集来检验每条边中的两个端点是否在同一集合中。若不在同一集合中,则将其所在的两个集合合并,并把当前测试边加入到最小生成树中;若在同一集合,则将该边丢弃。

4.一直执行步骤3, 直至最小生成树中的边数等于总顶点数减1 或 枚举完所有边。当结束时若最小生成树的边数不等于总顶点数减1,则说明图不连通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值