栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python20行代码实现prim算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python20行代码实现prim算法

import numpy
num = int(input("输入图中节点的个数:"))
graph = numpy.zeros([num,num])
for i in range(0,num):
    for j in range(0,num):
        tap = input("请输入点{}到点{}的距离(-1为无穷远)".format(i,j))
        graph[i,j] = tap
while 1:
    select = int(input("选择你prim算法的起始节点:"))
    result = numpy.ones([num]) #定义已经选择的节点集合
    result[select] = 0 #加入到判定数组中
    while result.any() != 0:
        node = [0,0,1000]
        for i in range(0,num):
            if result[i] == 0:
                for j in range(0,num):
                    if node[2] > graph[i,j] and graph[i,j] != -1 and result[j] != 0:
                        node = [i,j,graph[i,j]] #更新比较量的值
        result[node[1]] = 0 #添加节点进入
        print("{}节点已经加入,从节点{}到节点{}且长度为{}".format(node[1],node[0],node[1],node[2]))

首先输入图中共有多少个点用num进行存储,然后使用python中的numpy数据分析库创建一个num*num大小的领接矩阵,然后进行num*num次循环,让用户初始化整个图,-1代表无穷远也代表自身到自身的距离。

虽然精简但好用!首先我们需要让用户输入起始的节点,然后创建一个num长全是1的数组,此数组用于后续的集合判断,也就是是否所有点都加入到了集合中。

首选肯定是将已选的点加入集合当中,然后开始while循环,.any()函数是指数组中所有元素只要有一个不为0则循环。第一个for循环是为了找到已经在集合中的某一个点,如果找到则进行对其相邻的所有边的遍历,如果边长小于我们设定的初始值无限大也就是1000,那么就将此长度存入到node节点中,并且存入从i到j点这个路径。当所有的已选节点都循环完一遍之后,我们会找到一个最小的边,将此边指向的节点存入到result数组中,然后打印输出最终结果,然后再讲node节点初始化即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号