Algorithm 最小生成樹之 Kruskal

2021-06-23 00:26:59 字數 673 閱讀 5586

個人觀點,較prime演算法,kurskal演算法更加的簡單,這裡我們只需要每一次去需找權值最小的那條邊就好,在這裡我們先可以利用sort進行快排,得到權值最小的map[i] 。 得到該條邊的兩個節點map[i].u 和map[i].v,這時候你需要判斷能不能用這條邊,因為最小生成樹是不能形成迴路,所以用到了 並查集的方法,可以快速的判斷這兩個點是否滿足條件。如果不存在關係那麼那麼就把這條邊加入,反之,捨棄該邊,直到e-1邊為止。

(該**未印證過~~)

#include#include#includeusing namespace std ;

#define int_max 1000000

#define maxn 100

int father[maxn] ;

typedef struct node

kruskal ;

int cmp(kruskal x , kruskal y)

//該函式是用來尋找父親節點的 ,在後面的用處就是判斷兩個節點是否存在關係

//如果存在那麼這兩個點不能加進來,加進來會形成迴路 。

find (int x)

int main()

if(cot == e-1)

break ;

}return 0 ;

}

最小生成樹之Prim

a 生成樹 b 未被訪問過的點的集合 pre i 生成樹中i的前驅節點。a中的dis i 生成樹中包含點i的邊的長度。b中的dis i i到a的最短距離 vis 標記是否遍歷過 是否屬於a prim演算法的思想 1.任選一點,不妨選擇第乙個點,加入生成樹a。2.遍歷b,尋找一點u,使其到a的距離最小...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...