最小生成樹的Prim 普里姆演算法

2021-10-02 10:27:15 字數 800 閱讀 8816

要生成最小生成樹的話,有兩種演算法 prim 和 kruskal,這裡先把prim給實現了,剩下的再說~

prim演算法的大概思路是這樣子的

將圖中的所有頂點分為兩類集合:當前在最小生成樹中的點集和當前不在最小生成樹中的點集,開始時隨機抽取乙個點,作為起始點,放入最小生成樹點集中。然後尋找連線點集中的點和不在點集中的點之間的邊的最小值。將這個邊放入最小生成樹中,把對應連線的頂點放入已在最小生成樹中的點集。重複上述步驟,當最小生成樹中邊的數量為頂點數量-1時,演算法完成。

#include 

#include

using namespace std;

int main()

markvertex[1]

=1;//任意選取一點作為起始點加入最小生成樹中

int counter =0;

while(1

)}}}

if(boo)

break

;//如果所有點都在最小生成樹中,跳出迴圈

markedge[start]

[pos]

=counter;

//否則將邊匯入最小生成樹

markvertex[pos]=1

;//還有匯入對應的集合外的點

}for

(int k =

1; k <=n-1;

++k)}if

(!boo)

break;}

}return0;

}

最小生成樹 普里姆演算法 Prim

最小生成樹 的7到12行先初始化了矩陣第一行的值,本來很奇怪,那其他行的值怎麼辦?看到最後的28 35行才知道,原來從下面開始會逐步初始化與上個頂點相關的邊的值,最後能夠把全部都初始化了。截圖如下 演算法定義 1 輸入 乙個加權連通圖,其中頂點集合為v,邊集合為e 2 初始化 v new 其中x為集...

最小生成樹演算法 普里姆Prim演算法

1.鄰接矩陣儲存 cpp view plain copy 圖的鄰接矩陣儲存表示 define infinity int max define max vertex num 20 typedef enum graphkind typedef enum status typedef struct arc...

最小生成樹之Prim(普里姆)演算法

關於什麼是prim 普里姆演算法 在實際生活中,我們經常碰到類似這樣的一類問題 假設要在n個城市之間建立通訊聯絡網,則連通n個城市只需要n 1條線路。這時,我們需要考慮這樣乙個問題,如何在最節省經費前提 下建立這個通訊網.換句話說,我們需要在這n個城市中找出乙個包含所有城市的連通子圖,使得 其所有邊...