普里姆算法(prim算法)求最小生成樹

普里姆算法(Prim's Algorithm)是一種用於尋找圖的最小生成樹的算法。它從一個頂點開始,逐步添加邊,直到形成一個完全圖。

以下是普里姆算法的基本步驟:

  1. 初始化:選擇圖中的一個頂點作為最小生成樹的起始頂點,並將其加入已選頂點集合。
  2. 從剩餘未選頂點中找出距離起始頂點最遠的未選頂點。將這個頂點加入已選頂點集合,並將其從未選頂點集合中移除。
  3. 對於當前的所有邊(邊的兩個頂點不在已選頂點集合中),選擇權重最小的邊並將其加入最小生成樹中。如果新添加的邊連線的兩個頂點已經被選擇過一次,則不添加該邊。
  4. 重複步驟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

使用上述代碼,你可以輸入一個圖的結構和權重,並獲得該圖的最小生成樹。請注意,圖應表示為一個鄰接矩陣或鄰接列表,其中每個元素表示兩個頂點之間的邊的存在和權重。

注意:以上代碼假設輸入的圖是一個有效的、連通的、無向圖。如果輸入的圖不滿足這些條件,結果可能不正確。在實際套用中,你可能需要添加一些錯誤檢查和處理代碼。