【图论】最小生成树与Prim、Kruskal算法

本文介绍了Prim和Kruscal算法,基于最小生成树的性质,通过松弛操作构建最小生成树,以及如何在给定数据结构中实现这两个算法。实例代码展示了如何使用C++进行最小范围计算的过程。

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

求图的最小生成树的Prim、Kruscal算法,其实都是由最小生成树的性质推来的,掌握了该性质,便能较容易地推导出这两种算法。

最小生成树的性质

无向图G的顶点集为 V V V,设 U U U V V V的真子集, u ∈ U u\in U uU v ∈ ( V − U ) v\in (V- U) v(VU),边u-v是连通 U U U、的所有边中权重最小的一条,则边u-v一定在G的最小生成树(MST)中。
反证法证明:假设T是一个MST,边u-v不在该MST中,先把它加入到T,则出现包含该边的环;T中必存在另一条边 u ′ − v ′ u^\prime-v^\prime uv,连接题中两个集合,删除它后,环消失,出现新的MST,并且比原MST的权重更小,矛盾。

Prim算法

思路就是任取一个顶点作为初始U,不断寻找连接两个子集的所有边中权重最小的一条,把此边在 V − U V-U VU上的顶点移到 U U U,重复这个操作,直至U包含全部顶点。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值