最小生成树:普里姆(Prim)算法详细图解 python代码

  1. 什么是普里姆算法?
    权重:不一定是距离,有可能是成本或者价钱…
    例子:我要修A村庄到B,C村庄怎么修是最低成本呢?BC之间距离近但是可能有山川修起来很难,这时候就考虑权重,不是距离。

  2. 图解
    在这里插入图片描述
    在这里插入图片描述
    矩阵图 :这里代码是用pandas处理

    A  B  C  D  E  F  G
    A  0  5  ~  ~  3  ~  5
    B  5  0  2  5  4  ~  ~
    C  ~  2  0  ~  ~  ~  ~
    D  ~  5  ~  0  4  3  ~
    E  3  4  ~  4  0  2  3
    F  ~  ~  ~  3  2  0  3
    G  5  ~  ~  ~  3  3  0
    
import pandas as pd

df = pd.read_excel( '14.普里姆算法-.xlsx' , index_col=0 )
print(df)
print('第0行第1列的数据为:',df.iloc[0,1])
print('第three行第二列的数据为:',df.loc['B','C'])

values = ['A']  # 求得最近的点
target = ['B', 'E','D', 'C', 'F', 'G']  # 目标点

# 算出A到所有点最近的距离

result = []
def func():
    r = None  # 最短的距离值
    ts =None
    pos = []  # 最短的距离坐标
    for v in values:
        for t in target:
            data = df.loc[ v, t ]
            if data == '~' or  data == 0 or r == '~':
                continue

            if r == None:
                r = data

            if data <= r :
                r = data
                ts = t
                pos = [ v, t ]

    if pos and  pos[1] not in values:
        values.append(pos[1])
        target.remove(ts)

    result.append(pos)

    print(values)
    print(result)



while target:
    func()

在这里插入图片描述
xlxs格式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值