Day10 最小生成樹 kruskal演算法

2021-08-20 17:30:08 字數 741 閱讀 5563

演算法步驟:

1)把所有邊存在乙個陣列裡邊,按權值從小到大排個序

2)從小到大取出每一條邊,看看邊的兩個端點在不在乙個聯通集上(並查集),如果在就捨棄這條邊看下一條,不在就把這兩個點並起來,答案加上這條邊的長度。

3)判斷一下最終是否是聯通的,如果是連通的就是一棵最小生成樹了。

**:

#include#include #include #include #include #include #include #include using namespace std;

const int maxn = 10005;

int pre[maxn];

int find(int x)

int i=x,j;

while(pre[i]!=r)

return r;

}struct edgeedges[maxn];

bool cmp(edge a, edge b)

int main()

int ans = 0;

sort(edges+1,edges+n+1,cmp);

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

}int cnt = 0;

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

if(cnt > 1) printf("?\n");

else printf("%d\n",ans);

}return 0;

}

Algorithm 最小生成樹之 Kruskal

個人觀點,較prime演算法,kurskal演算法更加的簡單,這裡我們只需要每一次去需找權值最小的那條邊就好,在這裡我們先可以利用sort進行快排,得到權值最小的map i 得到該條邊的兩個節點map i u 和map i v,這時候你需要判斷能不能用這條邊,因為最小生成樹是不能形成迴路,所以用到了...

最小生成樹 次小生成樹

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

最小生成樹

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