通用算法 -[图算法] -最小生成树

本文介绍了图算法中的最小生成树问题,包括最小生成树的定义和实际应用。文章详细讲解了Kruskal算法和Prim算法,分别通过实例演示了这两种算法的步骤,并分析了算法的重点在于边的排序和判断回路的方法。最后,提到了两种算法的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、最小生成树

图算法里面有一个问题就是关于所有路径中的最小加权路径,它对应的实际例子类似电路板里面如何走线效率最高,用的线的长度最小?

这一类的问题归根到底就是最小生成树的问题,最小生成树即是图中最佳的路径选择,最小生成树的问题是一个典型的贪心算法,每一步都选择权重最小的边。

最小生成树的定义:
在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。
在这里插入图片描述

例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。
在这里插入图片描述
求图中的最小生成树的问题主要有两个经典的算法,Kruskal算法和Prim算法下面就这两个算法进行详细的论述:

2、Kruskal算法

(1)克鲁斯卡尔算法介绍
克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。

基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。

具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。

(2)克鲁斯卡尔算法图解
以上图G4为例,来对克鲁斯卡尔进行演示(假设,用数组R保存最小生成树结果)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_YuHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值