【暖*墟】 #图论# 最小生成树

本文介绍了最小生成树的概念及其重要性质,详细讲解了普里姆算法和克鲁斯卡尔算法的思路及代码实现。通过实例展示了这两种算法如何找到连通网的最小生成树,帮助理解贪心策略在图论问题中的应用。

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

1、最小生成树的概念

实际问题:在n个城市中建立一个通信网络,则至少需要布置n-1条通信线路。

这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?

于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,

边表示两个城市的通信线路,每条边上的权重就是我们搭建这条线路所需要的成本,

所以现在我们有n个顶点的连通网可以建立不同的n-1条边的生成树。

当我们构造这个连通网所花的成本最小时,此图就称为最小生成树。

最小生成树的重要性质:MST性质

  • 假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集,
  • 如果(u,v)是一条具有最小权值的边,其中u属于U,v属于V-U,
  • 则必定存在一颗包含边(u,v)的最小生成树。

下面就介绍两种使用MST性质生成最小生成树的算法:普里姆算法和克鲁斯卡尔算法。

 

2、普里姆算法—Prim算法

【一. 算法思路】

V为点的全集。首先从图中的一个(任意)起点a开始,把a加入U集合,

从与a有关联的边中寻找权重最小的那条边、并且该边的终点b在顶点集合(V-U)中,

我们也把b加入到集合U中,并且输出边(a,b)的信息,

这样我们的集合U就有:{ a , b }。

寻找与a或b关联的边中、权重最小的那条、并且该边的终点在集合(V-U)中。

我们把c加入到集合U中,并且输出对应的那条边的信息,

这样我们的集合U就有:{a,b,c}这三个元素了,一次类推,直到所有顶点都加入到了集合U。

对下面这幅图求其最小生成树:

这里写图片描述

从顶点v1开始,(v1,v3)边的权重最小,所以第一个输出的边就是:v1—v3=1。

这里写图片描述

然后,我们要从v1和v3作为起点的边中寻找权重最小的边,

首先了(v1,v3)已经访问过了,所以我们从其他边中寻找,

发现(v3,v6)这条边最小,所以输出边就是:v3—-v6=4。

这里写图片描述

然后,我们要从v1、v3、v6这三个点相关联的边中寻找一条权重最小的边,

我们可以发现边(v6,v4)权重最小,所以输出边就是:v6—-v4=2。

这里写图片描述

然后,我们就从v1、v3、v6、v4这四个顶点相关联的边中寻找权重最小的边,

发现边(v3,v2)的权重最小,所以输出边:v3—–v2=5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值