用python实现最小生成树--Prim算法 - Go语言中文社区

用python实现最小生成树--Prim算法


PS:如果进来是找《用matlab画散点图,并指定点与点之间的连线》这篇文章的,请进这个链接:https://blog.csdn.net/heavenmark/article/details/82794488

一、从Excel导入邻接矩阵

import xlrd
import sys

def matrix(address):                           #读取excel生成邻接矩阵
    wb = xlrd.open_workbook(address)
    sheet1 = wb.sheet_by_name('邻接矩阵_距离')
    L = []
    for i in range(1,13):
        a = sheet1.row_values(i)
        a.remove(a[0])
        L.append([int(x) for x in a])
    # print(L)
    return L

二、实现最小生成树

import matrix
import sys

def get_tree(primgraph,chararray):
    charlist = []
    charlist.append(chararray[0])
    mid = []    #mid[i]表示生成树集合中与点i最近的点的编号
    lowcost = []    #lowcost[i]表示生成树集合中与点i最近的点构成的边最小权值 ,-1表示i已经在生成树集合中
    lowcost.append(-1)
    mid.append(0)
    n = len(chararray)
    for i in range(1,n): #初始化mid数组和lowcost数组
        lowcost.append(primgraph[0][i])
        mid.append(0)
    sum = 0
    List = []
    MAX = sys.maxsize
   # MAX = 0
    for _ in range(1,n): #插入n-1个结点
        minid = 0
        min = MAX
        for j in range(1,n):  #寻找每次插入生成树的权值最小的结点
            if(lowcost[j]!=-1 and lowcost[j]<min):
                minid = j
                min = lowcost[j]
        charlist.append(chararray[minid])
        print(chararray[mid[minid]]+'——'+chararray[minid]+'权值:'+str(lowcost[minid]))
        sum+=min
        List.append(lowcost[minid])
        lowcost[minid] = -1
        for j in range(1,n):  #更新插入结点后lowcost数组和mid数组值
            if(lowcost[j]!=-1 and lowcost[j]>primgraph[minid][j]):
                lowcost[j] = primgraph[minid][j]
                mid[j] = minid
    print(List)
    print("sum="+str(sum))
    print("插入结点顺序:"+str(charlist))
    return List


if __name__ == '__main__':
    address = 'C:/Users/Administrator/Desktop/b题基础数据.xlsx'
    chararray = ['A','B','C','D','E','F','G','H','I','J','K','L']
    pop=[2,1,6,16,30,9,9,10,14,21,24,11]      #各城市人口
    #pop=[24,3,47,82,30,38,95,59,110,21,24,38]   #各省份人口
    primgraph = matrix.matrix_valule(address,pop)     #计算网络价值的邻接矩阵
    get_tree(primgraph,chararray)

三、执行结果
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/heavenmark/article/details/78114735
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 10:22:03
  • 阅读 ( 1119 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢