最小生成树之Prim算法-使用邻接矩阵实现

Prim算法是构造最小生成树的一种方法,它通过不断选取与已生成树顶点距离最近的非树顶点来扩展生成树。借鉴迪杰斯特拉算法的思想,使用dist数组记录每个顶点到生成树中任意顶点的最短距离,以此优化查找最近顶点的过程。通过不断迭代,直至所有顶点都加入生成树,形成一棵最小生成树。
摘要由CSDN通过智能技术生成

最小生成树的算法,网上有详细的介绍,这里简单谈一下关键的几个步骤:

1:prim算法和单源最短路径中的迪杰斯特拉算法很相识,也在其中借鉴了部分算法。总的来说将图上的顶点分成两部分。一部分

      为树顶点(已被选入生成树的顶点)和非树顶点(还未被选入生成树的顶点)。首先选择任意一个顶点加入生成树,然后从剩

     下的非树顶点中选择一个距离生成树最近的顶点加入到生成树中,并且更新其它非树顶点到生成树的距离,再选择一个距离生成

      树最短顶点,再更新剩下的顶点,然后依次类推,重复操作n-1次(n为顶点数)。

2:那么问题的关键来了,如何从非树顶点中选择出距离生成树最近的顶点。如果把非树中的每个顶点和树中的每个顶点的距离进行比较的话,效率太低。这里就要借鉴迪杰斯特拉算法中的思想,迪杰斯特拉算法中采用一个dist数组,该数组记录各个顶点到源点的距离,然后每次扫描数组dist从中选出离顶点最近的顶点。然后通过该顶点的所有的边能否更新源点到各个顶点的距离,如果能则更新。

3:prim算法中借鉴使用dist数组这一思想,但是记录的最短距离不是到源点的距离,而是每个顶点到任意一个树顶点的距离。因为我们的目标不是非得靠近源点而是,靠近生成树就可以。也就是说只要靠近生成树中的任意一个树顶点就行。

参考博客:https://blog.csdn.net/qq_35644234/article/details/59106779

代码如下:


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值