zoukankan      html  css  js  c++  java
  • 【Python排序搜索基本算法】之Prim算法

        Prim算法是实现最简单的最小生成树(MST)算法,适合于稠密图。要实现Prim算法,我们主要关注的是增量的变化,也就是从每个非树顶点到树顶点的最短距离,使得最后生成一棵包括所有顶点的树,并且这棵树的边权值之和最小。下面用一个例子说明:


    代码如下:

    _=float('inf')
    
    def prim(graph,n):
    	dis=[0]*n
    	pre=[0]*n
    	flag=[False]*n
    	flag[0]=True
    	k=0
    	for i in range(n):
    		dis[i]=graph[k][i]
    	for j in range(n-1):
    		mini=_
    		for i in range(n):
    			if mini>dis[i] and not flag[i]:
    				mini=dis[i]
    				k=i
    		if k==0:#不连通
    			return
    		flag[k]=True
    		for i in range(n):
    			if dis[i]>graph[k][i] and not flag[i]:
    				dis[i]=graph[k][i]
    				pre[i]=k
    	return dis,pre
    
    
    if __name__=='__main__':
    	n=6
    	graph=[
    			[0,6,3,_,_,_],
    			[6,0,2,5,_,_],
    			[3,2,0,3,4,_],
    			[_,5,3,0,2,3],
    			[_,_,4,2,0,5],
    			[_,_,_,3,5,0],
    			]
    	dis,pre=prim(graph,n)
    	print(dis)
    	print(pre)


    输出结果如下:

    [0, 2, 3, 3, 2, 3]
    [0, 2, 0, 2, 3, 3]
    


    用粗边表示计算出的最小生成树如下:



    转载请注明:转自 http://blog.csdn.net/littlethunder/article/details/9748361

  • 相关阅读:
    正则
    cookie、sesion
    POJ-1509
    HDU-3374
    ZOJ-3822
    HDU-5492
    在什么情况下Java比C++快?
    HDU-5451
    SPOJ-913
    莫比乌斯反演入门
  • 原文地址:https://www.cnblogs.com/riskyer/p/3237075.html
Copyright © 2011-2022 走看看