最小生成樹問題,python解法

2021-08-21 14:42:23 字數 1137 閱讀 6609

思路很簡單:

主要是建立兩個集合,乙個表示已經遍歷過的節點集合s,另乙個表示還沒有遍歷過的節點w,演算法的主要思想借鑑了prim演算法,但是我沒有盡行歸併操作,直接遍歷s和w中的點,尋找最短的邊,從w中刪除,並加入s中,本文參考:主要python演算法**如下:

# 最小生成樹,動態規劃解法

class solution:

def __init__(self,x,start_node):

self.x = x

self.start_node = start_node

def prim(self):

num = len(self.x)

first_node = self.start_node

last_node = self.start_node

sets = range(num)

sets.pop(first_node)

first_set = [self.start_node]

self.dtgh(first_set,sets)

return first_set

def dtgh(self,past_sets,sets):

if len(sets) == 0:

return

d_i =

d_min = 10000

# 遍歷還未經過的節點

for i in range(len(sets)):

d_ij = # 儲存已經過集合中所有節點(j)到新集合中i節點的距離

for j in past_sets:

# 尋找最短的i節點到j節點的路徑

if min(d_ij)", sets[i_d], "the distance", d_increase

sets.pop(i_d)

self.dtgh(past_sets,sets)

d = [[0,6,1,5,999,999],[6,0,5,999,3,999],[1,5,0,5,6,4],[5,999,5,0,999,2],[999,3,6,999,0,6],[999,999,4,2,6,0]]

start_node = 0

s = solution(d,start_node)

s.prim()

最小生成樹的解法

下標為1 n 返回最小生成樹的權值,返回 1說明無連通 define inf 0x3f3f3f3f int g 1001 1001 int vis 1001 lowc 1001 void init int x,int y,int v int prim int g 1001 int n return ...

最小生成樹問題

1.構造可以使n個城市連線的最小生成樹。問題描述 給定乙個地區的n個城市間的距離網,用prim演算法或kruskal演算法建立最小生成樹,並計算得到的最小生成樹的代價。4 要求 1 城市間的距離網採用鄰接矩陣表示,鄰接矩陣的儲存結構定義採用課本中給出的定義,若兩個城市之間不存在道路,則將相應邊的權值...

最小生成樹問題

最小生成樹 是一棵樹 無迴路 個頂點一定有 條邊 包含全部頂點 條邊都在圖里 邊的權重和最小 生成約束 只能用圖里有的邊 只能正好用掉 條邊 不能有迴路 主要演算法 prim演算法 讓樹長大 int prim int n int ans 0 距離權值總和 vis 1 true 生成樹的根 起點 標記...