贪心算法——最小生成树Prim算法

最小生成树Prim算法

最小生成树(MST)是图论当中一个重要的算法,在实际生活中具有广泛的应用。有多种算法可以解决最小生成树问题,这里讲解Prim算法

问题描述

​在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。
最小生成树其实是最小权重生成树的简称。

分析设计

Prim算法是解决最小生成树问题的经典算法之一。

其主要思想为:

  1. 出发;从图G中找到一个点a作为起始点(不一定是最终最小生成树的树根),加入到MST集合中;
  2. 从与a相邻的顶点中选出权值最小的边,对应点为顶点b,将b也加入到MST中。这样就找到了一组最小生成树的邻接边(树枝);
  3. 不断在G-MST集合(即剩余顶点)中的找到一个顶点v,使得v到MST集合中任意一点的权值最小,将v加入MST中;
  4. 重复第3步,直至所有点都在MST中。此时,最小生成树就建好了。

在这里插入图片描述

gif制作来源于VisuAlgo https://visualgo.net/zh/mst?slide=1

现在我们就大致知道了Prim算法的基本思路,接下来就是具体实现。

  1. 我们采用二位数组邻接矩阵的数据结构来储存图的相关信息;最小生成树采用结构体数组的形式存储:存储顶点a,顶点b,邻接边权值w;

  2. 构造数组 M I N e d g e [ n ] MINedge[n] MINedge[n],其中n为顶点数。 M I N e d g e [ i ] MINedge[i] MINedge[i]表示顶点i到MST集合中任意一点的最小权值; M I N e d g e [ i ] = − 1 MINedge[i]=-1 MINedge[i]=1表示顶点i在MST中。
    在这里插入图片描述
    如在此图中,此时,点v1为最小生成树的顶点(即v1在MST中),则 M I N e d g e [ 2 ] = 2 、 M I N e d g e [ 3 ] = 4 、 M I N e d g e [ 4 ] = 1 、 M I N e d g e [ 1 ] = − 1 MINedge[2]=2、MINedge[3]=4、MINedge[4]=1、MINedge[1]=-1 MIN

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值