普里姆算法(prim算法)求最小生成樹
普里姆算法(Prim's Algorithm)是一種用於尋找圖的最小生成樹的算法。它從一個頂點開始,逐步添加邊,直到形成一個完全圖。
以下是普里姆算法的基本步驟:
- 初始化:選擇圖中的一個頂點作為最小生成樹的起始頂點,並將其加入已選頂點集合。
- 從剩餘未選頂點中找出距離起始頂點最遠的未選頂點。將這個頂點加入已選頂點集合,並將其從未選頂點集合中移除。
- 對於當前的所有邊(邊的兩個頂點不在已選頂點集合中),選擇權重最小的邊並將其加入最小生成樹中。如果新添加的邊連線的兩個頂點已經被選擇過一次,則不添加該邊。
- 重複步驟2和3,直到所有頂點都被選擇過。
以下是一個使用Python實現的普里姆算法的簡單示例:
import sys # 導入系統模組
def prim(graph):
num_vertices = len(graph) # 獲取圖中的頂點數量
selected_vertices = [0] # 初始化已選頂點集合
mst = [] # 初始化最小生成樹
for _ in range(num_vertices): # 遍歷所有頂點
min_edge = sys.maxsize # 初始化最小權重邊
for i in range(num_vertices):
if i not in selected_vertices and graph[i][selected_vertices[0]] > min_edge: # 如果邊的兩個頂點不在已選頂點集合中且權重小於當前最小權重邊
min_edge = graph[i][selected_vertices[0]] # 更新最小權重邊
min_index = i # 記錄最小權重邊的索引
mst.append(min_index) # 將最小權重邊的索引添加到最小生成樹中
selected_vertices.append(min_index) # 將該頂點加入已選頂點集合
return mst
使用上述代碼,你可以輸入一個圖的結構和權重,並獲得該圖的最小生成樹。請注意,圖應表示為一個鄰接矩陣或鄰接列表,其中每個元素表示兩個頂點之間的邊的存在和權重。
注意:以上代碼假設輸入的圖是一個有效的、連通的、無向圖。如果輸入的圖不滿足這些條件,結果可能不正確。在實際套用中,你可能需要添加一些錯誤檢查和處理代碼。