Kruskal演算法模板(C語言)

2021-10-14 07:44:02 字數 778 閱讀 7671

kruskal演算法是求連通網的最小生成樹的另一種方法,該演算法的思想是從小到大加入邊,是個貪心演算法,演算法的時間主要消耗在對邊進行排序,時間複雜度為o(eloge),適合求邊數較少圖的最小生成樹。

**如下:

#include

#include

#include

const

int n =

100010

;typedef

struct

edge;

edge e[n]

;//存邊

int s[n]

;//並查集

int n, e, minsum;

//n是點數,e是無向邊的邊數

//路徑壓縮

intfind

(int x)

//按秩歸併

void

union

(int root1,

int root2)

else

}//按邊權從小到大排序

intcmp

(const

void

*a,const

void

*b)void

kruskal()

idx++;}

}int

main

(void

)kruskal()

;printf

("%d\n"

, minsum)

;return0;

}

Kruskal 演算法模板題

描述 隨著小hi擁有城市數目的增加,在之間所使用的prim演算法已經無法繼續使用了 但是幸運的是,經過計算機的分析,小hi已經篩選出了一些比較適合建造道路的路線,這個數量並沒有特別的大。所以問題變成了 小hi現在手上擁有n座城市,且已知其中一些城市間建造道路的費用,小hi希望知道,最少花費多少就可以...

kruskal演算法(C 實現)

templatebool kruskal edgenodet next i,j,c 把邊放到最小堆 minheap h 1 h.initialize e,e,e unionfind u n k 0 while e k n 1 deactivatepos h.deactivate return k n...

Kruskal演算法(c 實現)

演算法原理 1.將邊的權值從小到大排列 2.構造輔助陣列root n n為節點個數 3.按照邊的權值從小到大的順序考察各條邊 4.關鍵 如何判別被考察邊的兩個頂點是否位於兩個連通分量 用到輔助函式 先將輔助函式各項初始化為 1,如果root i 為 1 則頂點就為該連通分量的 跟 對於邊 u,v 設...