Prim算法求最小生成树

什么是图的最小生成树

一个有 N N N 个点的图,边一定是大于等于 N − 1 N-1 N1 条的。图的最小生成树,就是在这些边中选择 N − 1 N-1 N1 出来,连接所有的 N N N 个点。这 N − 1 N-1 N1 条边的边权之和是所有方案中最小的。

如图,该最小生成树的权值为 8 + 18 + 18 + 15 + 9 + 3 = 71 8+18+18+15+9+3=71 8+18+18+15+9+3=71

常用算法

Prim 算法

Prim 算法采用与 Djikstra、Bellman-Ford 算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点。

以 1 为起点生成最小生成树,min[v] 表示蓝点 v 与白点相连的最小边权, M S T \mathrm{MST} MST 表示最小生成树的边权之和。

  • 初始化:min[v] = ∞ =\infty =min[1] = 0 =0 =0 M S T = 0 \mathrm{MST} =0 MST=0

  • for(int i=1;i<=n;i++)

  1. 寻找 min[u] 最小的蓝点 u。

  2. 将 u 标记为白点。

  3. $\mathrm{MST} $ += min[u]

  4. for 循环寻找与白点 u 相连的所有蓝点 v,并将 min[v] 更新。

if(w[u][v]<min[v])
	min[v]=w[u][v];
  1. 求得 M S T \mathrm{MST} MST 即为最小生成树的权值之和。

算法图解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值