python实现prim 最小生成树算法
来源:互联网 发布:网络博客游戏破解之法 编辑:程序博客网 时间:2024/05/20 03:41
1.按照Prim 方法,从顶点1 出发,该网的最小生成树的产生过程如图:
2.代码:
'''#file:py_prim.py#最小生成树 prim算法的python实现普里姆(Prim)算法:由线到点,适合边稠密。时间复杂度O(N^2)href=http://blog.csdn.net/hguisu/article/details/7719428'''debug=0MAX_NUM=10000v_num=6grapharr=[[0,6,1,5,MAX_NUM,MAX_NUM], [6,0,5,MAX_NUM,3,MAX_NUM], [1,5,0,5,5,4], [5,MAX_NUM,5,0,MAX_NUM,2], [MAX_NUM,3,6,MAX_NUM,0,6], [MAX_NUM,MAX_NUM,4,2,6,0], ]#######################################U放已经匹配好的顶点:U=[]#V初始化为所有顶点的集合:V=[]#T放各个边:T=[]def init(): if(debug): print("grapharr=",end="") print(grapharr) i=0 while i<v_num: V.append(i+1) i=i+1 if(graph_check()=="合法"): print("合法") else: print("非法") exit(1)def graph_check(): print("检查图表数组是否合法") return "合法"def prim_start_vertex(start): if(start<1): print("ERROR:start=",start) print("ERROR:change start to 1 by default!") start=1 U.append(start) del V[start-1]def list_sort(l): if(len(l)<1): print("ERROR:len of l =",len(l)) exit(1) index=0 i=0 min_val=l[0] while i < len(l): if min_val > l[i]: min_val=l[i] index=i i=i+1 if(debug): print("[list_sort]:l=",l,";index=",index) return indexdef min_wui(): m=MAX_NUM close_edge={'u':-1,'v':-1} edge_list=[] vertex_list=[] i=0 j=0 #算出U和V之间所有边的长度: lu=len(U) lv=len(V) if(debug): print("##############entry min_wui###########") print("lu=",lu,";lv=",lv) while i < len(U): while j < len(V): if(debug): print("i=",i,";j=",j) print("U[i]=",U[i],";V[j]=",V[j]) temp=grapharr[U[i]-1][V[j]-1] if(temp>0): if(temp<MAX_NUM): close_edge={'u':U[i],'v':V[j]} if(debug): print("close_edge=",close_edge) vertex_list.append(close_edge) edge_list.append(temp) j=j+1 #for i: i=i+1 j=0 #end of :for while i if(debug): print("vertex_list=",vertex_list) print("edge_list=",edge_list) min_index=list_sort(edge_list) close_edge=vertex_list[min_index] U.append(close_edge['v']) del V[V.index(close_edge['v'])] if(debug): print("U=",U) print("V=",V) return close_edgedef py_prim(start): init() prim_start_vertex(start) print("init values:") print("U=",U) print("V=",V) print("T=",T) while(len(U)!=v_num): if(debug): print("len(U)=",len(U)) our_edge=min_wui() T.append(our_edge) print("========RESULT============") print("U=",U) print("V=",V) print("T=",T) ######################################if(__name__=="__main__"):#开始主程序: debug=0 py_prim(1)
3.结果:
>>> 检查图表数组是否合法合法init values:U= [1]V= [2, 3, 4, 5, 6]T= []========RESULT============U= [1, 3, 6, 4, 2, 5]V= []T= [{'u': 1, 'v': 3}, {'u': 3, 'v': 6}, {'u': 6, 'v': 4}, {'u': 3, 'v': 2}, {'u': 2, 'v': 5}]>>>
4.说明:
代码可以到“我的资源” 下载 http://download.csdn.net/detail/playboyno/4475898
- python实现prim 最小生成树算法
- 最小生成树Prim算法实现
- 最小生成树的prim算法实现
- 最小生成树prim算法实现
- prim 最小生成树算法 java实现
- Prim算法实现最小生成树MST
- poj1258--最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树Prim算法实现
- 最小生成树prim算法实现
- 简单实现最小生成树-Prim算法
- 最小生成树prim算法实现
- 最小生成树的prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- apache运行一段时间后就挂掉,重启恢复,解决办法
- 安装Android Sdk-JDK not found系统找不到指定的文件Java.exe JDK已安装报错 解决方法
- 由mount/umout说起linux磁盘管理
- 淘宝评论数据抓取简记
- [java]反射机制
- python实现prim 最小生成树算法
- AMD开发者峰会报道:迎接异构计算新时代抢沙发
- ant入门配置1
- Struts2之I18N
- try中的return与finally
- UtilBox(ub)基础组件 -- Log日志(1)
- Symbian S60v5 编程中的程序图标更换问题
- IAR for AVR delay函数
- C++语言进阶心得之一二