最小生成樹prim演算法python實現

2021-09-24 23:00:12 字數 1889 閱讀 7774

#editing time : 2019/7/3 20:40

#file name : 最小生成樹prim演算法.py

from heapq import *

class node(object):

pass

class unionfindset(object):

def __init__(self,nodes):

self.fatherdict = {}

# key node value father 一層一層向上找

self.sizedict = {}

# key 節點 value 節點所在集合共有多少個節點

for node in nodes:

self.fatherdict[node]= node

self.sizedict[node] = 1

#每個節點的父親是自己 並且所在的集合為個數為1

#因為要少掛多 ,所以要找節點數目

def findhead(self,node):

stack =

father = self.fatherdict[node]

while father!=node:

node = father

father = self.fatherdict[node]

while stack:

self.fatherdict[stack.pop()] = father

return father

def issameset(self,a,b):

return self.findhead(a) == self.findhead(b)

def uion(self,a,b):

if a is none or b is none:

return

ahead = self.findhead(a)

bhead = self.findhead(b)

if ahead!=bhead:

asize = self.sizedict[ahead]

bsize = self.sizedict[bhead]

if asize<=bsize:

self.fatherdict[ahead] = bhead

self.sizedict[bhead] = asize+bsize

else:

self.fatherdict[bhead] = ahead

self.sizedict[ahead] = asize+bsize

class node(object):

def __init__(self,value=none):

self.value = value #節點的值

self.come = 0 #節點入度

self.out = 0 #節點出度

self.nexts = #節點的鄰居節點

self.edges = #在節點為from的情況下,邊的集合

class edge(object):

def __init__(self,weight=none,fro,to):

self.weight = weight # 邊的權重

self.fro = fro # 邊的from節點

self.to = to #邊的to節點

def __lt__(self, other):

return self.weight0:

tonode = edge.to

if tonode not in set1:

set1.add(tonode)

res1.add(edge)

for nextedge in tonode.edges:

return res1

最小生成樹(prim演算法)

最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...

最小生成樹 Prim演算法

prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...

最小生成樹 prim 演算法

一 演算法描述 假設存在連通帶權圖g v,e 其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v u的邊 v0,u0 屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u v為止。這是,t中必有n 1...