最小生成樹之Prim演算法詳解

2021-08-15 12:42:57 字數 1425 閱讀 1904

普里姆演算法

(prim演算法),圖論中的一種演算法,可在

加權連通圖

裡搜尋最小生成樹。意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點(英語:vertex (graph theory)),且其所有邊的權值之和亦為最小。

演算法思想:

1) .輸入:乙個加權連通圖,其中頂點集合為v,邊集合為e;

2).初始化:vnew = ,其中x為集合v中的任一節點(起始點),enew = {},為空;

3).重複下列操作,直到vnew = v:

a.在集合e中選取權值最小的邊,其中u為集合vnew中的元素,而v不在vnew

集合當中

,在頂點集合v中

,並且v∈v(如果存在有多條滿足前述條件即具有相同權值的邊,則可任意選取其中之一);

b.將v加入集合vnew中,將邊加入集合enew中;

4).輸出:使用集合vnew和enew來描述所得到的

最小生成樹

圖例說明:

原圖:

第一步:找乙個a點,找與a點距離最短的點c,為1,連線

第二步:找與a,c距離最近的點且連線沒有迴路的點,為f,為4,連線

第三步:找與a,c,f距離最近的點且連線沒有迴路的點,為d,為2,連線

第四步:找與a,c,f,d距離最近的點且連線沒有迴路的點,為b,為5,連線

第五步:找與a,b,c,f距離最近的點且連線沒有迴路的點,為e,為3,連線

時間複雜度:

prim的時間複雜度為o(n*n),與網中的邊數無關,因此適用於求變稠密的網的最小生成樹

**如下:

int prim(int k)                    

} return sum;

}

Prim演算法生成最小生成樹詳解

建立乙個low陣列代表相應每個節點連線所需最小費用,乙個vis陣列標記相應節點是否連線過。low陣列的初始值用節點1到其餘各點的費用來填充 如該圖所示low陣列的初始值應該為 0634 5以上便是1號節點對於其他各點的費用 接下來在low陣列中尋找最小值 為3號節點費用為3最小。接著以3號節點為起始...

最小生成樹之prim演算法

最小生成樹的演算法思想和介面介紹過的求單源的最短路徑演算法dijkstra演算法有很多相似地方,甚至很多 都是一樣。prim演算法要解決的主要問題是路徑的最短問題。假設平面上有很多點,各個點之間有很多的線連線起來,並且到達各個點的距離不相同,需要求出一條路徑,使得各個點都能被連線起來,並且他們的距離...

最小生成樹之prim演算法

普利姆演算法 prim algorithm 最小生成樹的概念 所謂最小生成樹,就是在乙個具有n個頂點的帶權連通圖g中,如果存在某個子圖g 其包含了圖g中的所有頂點和一部分邊,且不形成迴路,並且子圖g 的各邊權值之和最小,則稱g 為圖g的最小生成樹。普利姆演算法 prim algorithm 演算法描...