kruskal求最小生成樹

2022-06-30 17:54:16 字數 707 閱讀 4324

kruskal求最小生成樹:

#include #include 

using

namespace

std;

const

int n = 100010

;int

p[n];

struct

edge

}edges[n];

int find(int

x)int

main()

; }

sort(edges,edges +m);

for(int i = 1; i <= n; i++) p[i] =i;

int res = 0, cnt = 0

;

for(int i = 0;i)

}if(cnt < n - 1) cout<<"

impossible

"

1、將所有的邊從到達進行排序, sort(edges, edges + m);

2、以此從小到大列舉每條邊的兩個點,如果兩個點不在同乙個集合當中(用並查集的祖先來判斷 find(a) == find(b)),那麼就進行合併 p[a] = b; 加入到集合當中來,累加邊權,再統計邊數cnt。

如果最終通過kruskal演算法得出的最小生成樹的邊數cnt < n - 1那麼就不符合最小生成樹的定義,n個點和n - 1條邊組成。

Kruskal演算法求最小生成樹

include include define max vex 100 typedef struct edge edge edgeset max vex 邊集陣列 edgnum max vex 1 int creat return edgnum 排序,使邊集陣列edgeset元素按權值遞增順序排列 v...

kruskal演算法求最小生成樹

kruskal演算法是一種使用貪心思路求解無向圖的最小生成樹的演算法。其大體思路為 將邊按權重排序,然後每次選出權最小且不使圖產生環的邊,作為樹的邊掛上樹。具體來講就是這麼兩個步驟 1.把邊按權重排序。2.依照1的順序遍歷邊 使用乙個並查集來判斷加進這條邊後圖中是否有環。如果沒有環,更新並查集,並把...

kruskal演算法求最小生成樹

描述 要求對乙個圖使用kruskal演算法求最小生成樹,依次輸出選出的邊所關聯的頂點序列,要求下標較小者在前,如圖所示,其頂點序列為1 3 4 6 2 5 3 6 2 3 輸入若干行整數 第一行為兩個整數,分別為圖的頂點數和邊數 第二行開始是該圖的鄰接矩陣,主對角線統一用0表示,無直接路徑的兩點用1...