[MATLAB] Kruskal算法 最小生成树 求解最优树 源码程序

本文介绍了如何使用Kruskal算法解决最小生成树问题,以实际的城市道路建设为例,解释了算法的基本思想和操作步骤,并提供了MATLAB代码实现,包括边权矩阵的构建和环路避免策略。
摘要由CSDN通过智能技术生成

实际问题

小Hi现在手上拥有N座城市,且已知其中一些城市间建造道路的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A、B、C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过这两条道路连通的)。
 

Kruskal算法解决方案

基本思想

将图的n个顶点看作n个分离的部分树,每个树具有一个顶点,算法的每一步就是选择连接两个分离树的具有最小权值的边,将两个树合二为一,直到只有一个树为止(进行n-1步)得到最小生成树。

如何使用Kruskal解决上述问题

实际上城市就是顶点,城市之间建造道路所需要的花费就是顶点之间的权重

Kruskal实际上就是一个贪心算法,每次都选取花费最少的道路进行修建,当然前提就是不会构成环路

示例演示

边权信息如下图

基于Kruskal的操作即为

  • 先选取顶点1-4的边,权值为1
  • 接着去顶点4-5的边,权值为3
  • 接下来本来应该去顶点1-5的边,但是由于会构成环,所以不选取
  • 接着选取顶点2-3的边,权值为6
  • 接着选取顶点2-5的边,权值为7,最小生成树构成。
     

最后结果就变成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值