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算法十分地相识,都是基于最短加权边来进行路径的搜索,从而将搜索的边加入集合汇总输出。

猜你喜欢

转载自blog.csdn.net/weixin_46245411/article/details/114480711