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 設...