最小生成树之kruscal算法
来源:互联网 发布:网络账号被盗报警 编辑:程序博客网 时间:2024/05/20 21:19
这几天留校疯狂学习,想起来了好多已经忘干净的算法,今天看了最小生成树的一些东西,和大家分享一下
#include <iostream>#include <algorithm>#define MAXM 1000using namespace std;int N,M;int fa[MAXM];//每个结点的父结点记录struct edge{ int x,y,w; edge(int x = 0,int y = 0,int w = 0):x(x),y(y),w(w){}}e[MAXM];//边的信息(连接x和y,权值为w)int getfather(int x)//查找代表元素(如果本身就是代表元素,返回本身,否则向上继续查找父节点,直到找到代表元素){ return x == fa[x] ? x : getfather(fa[x]);}bool cmp(const edge & a, const edge & b)//cmp函数重写{ return a.w < b.w;}int kruscal(){ sort(e ,e + M ,cmp);//将边按权值大小递增排列 int cnt = N; int ans=0; for(int i = 1;i <= N;++i) fa[i] = i;//初始化并查集(即每个元素的父结点都是其本身) for(int i = 0;i < M;++i) { int t1 = getfather(e[i].x);//查找代表元素 int t2 = getfather(e[i].y); if(t1 != t2)//是否成环(查找到的祖先如果相同,再联一条边就会成环) { fa[t1] = t2;//并操作 ans += e[i].w;//结果累加 //if (cnt == 1) break; } } return ans;}int main(){ int res; cin >> N >> M; for(int i = 0;i < M;i++) { cin >> e[i].x >> e[i].y >> e[i].w; } res = kruscal(); cout << res << endl; return 0;}
Sample Input
6 6
1 2 1
2 3 2
2 4 2
2 4 3
3 5 4
4 5 5
5 6 6
Sample Output
16
0 0
- 最小生成树之kruscal算法
- kruscal最小生成树算法
- 最小生成树-Kruscal算法
- 最小生成树之KRUSCAL
- 最小生成树之KRUSCAL
- 算法基础 - 最小生成树(Kruscal算法)
- 最小生成树(prim和kruscal算法)
- 最小生成树 Kruscal算法--poj 2377
- kruscal算法求最小生成树总结
- hiho1098 : 最小生成树·Kruscal算法
- Kruscal最小生成树算法(C++)
- HDU 1233最小生成树 Kruscal 算法
- 最小生成树 kruscal算法 C语言
- 最小生成树之PRIM及KRUSCAL
- 最小生成树 Kruscal
- 最小生成树~kruscal
- 最小生成树-kruscal
- 最小生成树的prim算法和kruscal算法
- 理论物理(凝聚态)某研究者得到的方程
- HSSFWorkbook手写excle报表
- Jboss自动关闭详解
- STL源码阅读-hashtable
- rqnoj PID26 / 合唱队形 ☆
- 最小生成树之kruscal算法
- C#中。简述 private、 protected、 public、 internal 修饰符的访问权限
- 算法6.3
- 黑马程序员_ 注解
- 职场分享:成功则的职场态度
- docker入门指引之在ceontos6.5下搭建docker的测试环境
- [ACM] POJ 1061青蛙的约会(扩展欧几里得求模线性方程)
- STL中map、set的数据结构及底层实现
- rsync