Prim算法的python实现

Posted joker-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prim算法的python实现相关的知识,希望对你有一定的参考价值。

#Prim算法的python实现

介绍:首先prim算法我使用的是与Dijkstra实现一致的方式方法,代码部分甚至不需要过多地修改就可以直接拿函数去使用.

def prim(matrix,non_matrix,n,Maxline):
    comp=0
    uncomp=i+1 for i in range(n-1)
    while((not uncomp)!=True):
        list_uncomp=list(uncomp)
        list_comp=list(comp)#将集合comp转换成列表进行索引操作
        Min=Maxline
        for i in range(len(list_uncomp)):
            v_point=list_uncomp[i]      #假设要取的在集合uncomp的点
            for j in range(len(list_comp)):
                uv_point=list_comp[j]   #取出已知集合comp的一个点
                if(matrix[v_point][uv_point]<Min or matrix[uv_point][v_point]<Min):
                    Min=matrix[v_point][uv_point]
                    get_point=v_point   #拟定要从uncomp取出的点
                    ready_point=uv_point #拟定要从comp取出的点
        print("(,)".format(ready_point,get_point))
        
        non_matrix[ready_point][get_point]=1    
        uncomp=set(list_uncomp) #将列表list_uncomp转换成集合uncomp
        uncomp.remove(get_point)
        comp.add(get_point)
    print(matrix)
    return non_matrix


matrix=[[999,6,1,5,999,999],
           [6,999,5,999,3,999],
           [1,5,999,5,6,4],
           [5,999,5,999,999,2],
           [999,3,6,999,999,6],
           [999,999,4,2,6,999]]
non_matrix=[[0,0,0,0,0,0],
            [0,0,0,0,0,0],
            [0,0,0,0,0,0],
            [0,0,0,0,0,0],
            [0,0,0,0,0,0],
            [0,0,0,0,0,0]]
find=prim(matrix,non_matrix,6,999)
print(find)

前提需要我们把列表放入函数参数。


总结

Prim算法与Dijkstra算法十分地相识,都是基于最短加权边来进行路径的搜索,从而将搜索的边加入集合汇总输出。

以上是关于Prim算法的python实现的主要内容,如果未能解决你的问题,请参考以下文章

[Python]贪心算法-Prim-和-Kruskal实现-最小生成树

技术图文:如何利用C# 实现 Prim 最小生成树算法?

最小生成树算法——Prim

Prim 的算法不适用于某个实现

Prim 算法 C++

图解:如何实现最小生成树(Prim算法与Kruskal算法)