最小生成樹 Prim演算法理解

2021-10-03 18:57:33 字數 1146 閱讀 4072

prim演算法理解:

根據上圖可以列寫出該連通網的鄰接矩陣,為了方便直觀的理解:

權值v0

v1v2

v3v4

v5v006

15ꚙꚙ

v1605

ꚙ3ꚙv2

1507

54v35

ꚙ70ꚙ

2v4ꚙ3

5ꚙ06

v5ꚙꚙ4

260如上圖所示,實際上prim演算法求解最小生成樹的過程就是不斷地尋找已走過頂點的最近頂點的過程(邊權值最小)。

因此如上圖所示,起點在v0點,尋找最近頂點,即v2點;找到v2點後,v2點作為當前頂點,繼續尋找最近頂點,這時和已走過的頂點(v0、v2)直接連通的點共有4個:v1、v3、v4、v5,但是顯然求解最小生成樹不能重複進入已經走過的點,對於這個問題prim演算法採用的方法是將已經走過的點到任何點的權值都設定為0,然後在尋找最短邊時,忽略權值為0點邊。

這樣當我們站在v2點處時,已走過的點到各個點之間的最短權值分別為:

權值v0

v1v2

v3v4

v5v0、v205

0554

以上敘述的內容其實就是prim演算法的核心,即:①尋找最近點;②迭代lowcost陣列。

在實際的演算法實現中,就是通過這樣一步一步迭代lowcost陣列,然後在lowcost陣列中尋找最小的權值,作為目標點,最終實現以最短路徑遍歷連通網。

**及詳細注釋:

void minispantree_prim(mgraph g)

{ int min,i,j,k;

/* 鄰接陣列 儲存每乙個頂點的鄰接點(也就是上乙個走過的點)的下標 */

int adjvex[maxwex];

/* 儲存當前頂點向其他頂點的距離(其中已完成的頂點置零,表示不能再走) */

int lowcost[maxwex];

lowcost[0] = 0;

adjvex[0] = 0;

/* init */

for(i=1;i——cloud over sky

——2020/3/11

最小生成樹Prim演算法理解

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...

最小生成樹Prim演算法理解

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...

最小生成樹Prim演算法理解

mst minimum spanning tree,最小生成樹 問題有兩種通用的解法,prim演算法就是其中之一,它是從點的方面考慮構建一顆mst,大致思想是 設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u v中找到另一點b使得點b到v中任意一點的權值最小,此...