學習kruskal(最小生成樹)筆記

2021-08-19 05:56:59 字數 713 閱讀 7105

先上比葫蘆畫瓢的**#includeusing namespace std;

struct edge

e[1001];

int sum = 0;

int all = 0;

int n,m;

int f[9]=;

void quicksort(int left,int right)

i=left;

j=right;

while(i != j)

quicksort(1,m);

for(int i=1;i<=n;i++)

for(int i=1;i<=m;i++) }

cout1,輸入之類的就不說了,n個頂點,m條邊。用結構體來實現,儲存邊的長度,兩邊頂點的要求。

2,對所有的邊長度進行排序。

3,將沒有包含在樹中的頂點利用最短邊引入樹

4,不斷重複3步。由於只引入未聯通的頂點,所以當引入n-1次的話,所有的點就聯通了。

關於引入部分的注意

1     引入的關鍵是判斷是不是已經聯通的頂點。

對於所有邊按公升序遍歷,判斷該邊的兩個頂點是否通過其他途徑已經聯通。

我所學的方法是利用並查集查詢祖節點來實現的。

2     判斷該節點已經在樹中的話,該邊遍歷過不作處理。

3     該邊兩個節點沒有通過其他途徑連線的話,就將該邊變為樹的一部分,並將兩個節點變為同乙個祖先。

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...

最小生成樹(kruskal)

kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...