[算法导论] prim算法求最小生成树

本文介绍了Prim算法的基本步骤,包括从一个初始点开始,不断寻找与已选点集距离最小的点并加入,以此来逐步构建最小生成树。算法在每一步中更新未被选择顶点的距离,直到所有顶点都包含在内。
摘要由CSDN通过智能技术生成

 prim算法

 1. 点集初始化为 {v1}。

 2. 寻找离点集距离最小的点min Min[k],加入点集B[k]=False。

 3. 如果不是顶点,权重+ = Min[k]。

 4. 如果不是初始顶点,就更新其他点的距离。

global MAX
# 最小生成树,蓝白点思想


def prim(W):
    # 优化
    weight = 0
    B = [True for i in range(len(W))]
    Min = [MAX, MAX, MAX, MAX, MAX]
    for i in range(len(W)):
        k = 0
        # 蓝白点转换
        for j in range(len(W)):
            if Min[j] < Min[k] and B[j]: # Min[k]记录最小值
                k = j #定位到距离最小的点
        B[k] = False
        if k != 0:
            weight += Min[k]
        # 更新权重
        for p in range(len(W)):
            if Min[p] > W[k][p] and B[p]:
                Min[p] = W[k][p]
    # 返回权重
    return weight


if __name__ == "__main__":
    MAX = 10000
    W = [[MAX,2,5,2,MAX],
         [2,MAX,3,MAX,3],
         [5,3,MAX,1,6],
         [2,MAX,1,MAX,MAX],
         [MAX,3,6,MAX,MAX]]
    print(prim(W))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心心喵

喵喵(*^▽^*)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值