kruskal
Posted wangxuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kruskal相关的知识,希望对你有一定的参考价值。
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <algorithm> 5 #include <stack> 6 #include <cstring> 7 #include <queue> 8 using namespace std; 9 10 const int maxn=100; 11 int parent[maxn]; 12 int n,m; 13 int i,j; 14 15 struct edge 16 { 17 int u,v,w; 18 }edges[maxn]; 19 20 int find(int i){ 21 int temp; 22 for(temp = i; parent[temp] >= 0; temp = parent[temp]); 23 while(temp != i){ 24 int t = parent[i]; 25 parent[i] = temp; 26 i = t; 27 } 28 return temp; 29 } 30 31 void merge(int a,int b){ 32 int r1 = find(a); 33 int r2 = find(b); 34 parent[r1]=r2; 35 } 36 37 void kruskal(){ 38 int sumWeight = 0; 39 int num = 0; 40 int u,v; 41 for(i=1; i<=n; i++) parent[i] = -1; for(int i=0; i<m; i++) 42 { 43 u = edges[i].u; 44 v = edges[i].v; 45 46 if(find(u) != find(v)){ 47 printf("%d-%d\n", u,v); 48 sumWeight += edges[i].w; 49 num ++; 50 merge(u, v); 51 } 52 } 53 printf("weight of MST is %d \n", sumWeight); 54 } 55 56 int cmp(const edge a, const edge b){ 57 return a.w < b.w; 58 } 59 60 int main() { 61 cin>>n>>m; 62 for(i=0; i<m; i++){ 63 cin>>edges[i].u>>edges[i].v>>edges[i].w; 64 } 65 sort(edges,edges+m,cmp); 66 kruskal(); 67 68 69 return 0; 70 } 71 /* 72 测试数据: 73 7 9 74 1 2 28 75 1 6 10 76 2 3 16 77 2 7 14 78 3 4 12 79 4 5 22 80 4 7 18 81 5 6 25 82 5 7 24 83 输出: 84 1-6 85 3-4 86 2-7 87 2-3 88 4-5 89 5-6 90 weight of MST is 99 91 */
以上是关于kruskal的主要内容,如果未能解决你的问题,请参考以下文章
最小生成树matlab代码Kruskal算法,用于二维网络生成