最小生成树及其构造方法

本文介绍了最小生成树的概念,重点解析了两种构造最小生成树的算法——普利姆算法和克鲁斯卡尔算法。普利姆算法通过维护lowcost和closest数组,逐步构建最小生成树;克鲁斯卡尔算法则按边的权值排序,通过vset数组判断是否形成回路。文章包含每种算法的思路、代码实现及总结。
摘要由CSDN通过智能技术生成

ps:好久没写新文章了,来到了广州见习,没有网络,也不知道这学校怎么想的!!接下来进入正题

何谓最小生成树

对于一个带权连通无向图G中的不同生成树,各棵树的边上的权值之和可能不同,边上的权值之和最小的树称之为该图得最小生成树

构造方法

求图得最小生成树的俩个算法,即普利姆算法和克鲁斯卡尔算法

普利姆算法(Prim)

在了解普利姆算法之前,先想想我们最开始的目的是什么?俗气一点说就是画路线图,而且这个路线必须是最短的。

思路

先用抽象一点的语言描述,就是现在我们先拿出图中的第一个顶点(其实可以是任意顶点),然后把这个顶点放进集合A中,然后将这个顶点与集合外的顶点连成的线的权值做比较,把那个能连权值最小的线的顶点也放进集合里面。然后再把集合里面的俩个顶点与集合外的顶点继续比较,重复此步骤。可以参考:
这里写图片描述

第一步:从①开始,①进集合,用与集合外所有顶点能构成的边中找最小权值的一条边
①——②权6
①——③权1 -> 取①——③边
①——④权5



第二步:③进集合,①,③与②,④,⑤,⑥构成的最小边为
①——④权5
③——⑥权4 -> 取③——⑥边

第三步:⑥进集合,①,③,⑥与②,④,⑤构成的各最小边
①——②权6
③——②权5
⑥——④权2 -> 取⑥——④边

第四步:④进集合,①,③,⑥,④与②,⑤构成的各最小边
①——②权6
③——②权5 -> 取③——②边
⑥——⑤权6

第四步:②进集合,①,③,⑥,②,④与⑤构成的各最小边
②——⑤权3 -> 取②——⑤边

没错上面的说法很好,但实际中的代码跟上面的思想是一样,但就有点难理解,我们换一种说法,从代码的角度来分析。
假如我们现在拿到手的是一个邻接矩阵存储方法的图(假设这个图有n个顶点)
1.那么首先我们先实例化一个数组A,一个数组B。先这么规定,数组A存储的是n-1条边的权值。那么另外一个数组就是存储边的起始顶点。举个例子A[1]=3,B[1]=4,代表的就是第一个顶点所连接的最短的边的权值是3,然后这条最短边是和第4个顶点连接而成的。
2.那么有了这俩个数组,事情就变得好办很多了。B[i]=k代表的就是i与k连接可以形成最小权值的边,而A[i]数组就代表i顶点与这个k(k=B[i])连接的边的那个最小权值。这里有点绕口。
从实际例子来讲思路比较好,先看看下图ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值