kruskal基础算法
来源:互联网 发布:什么是工业组态软件 编辑:程序博客网 时间:2024/06/04 19:31
/*Kruskal算法1:将所有边按照从小到大的顺序排列2:依次将权值最小的边加入生成树的子集当中3:重复以上的步骤直到找出n-1条边为止注:Kruskal适合求稀疏图问题,而prim算法适合求稠密图问题*/#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int maxn = 1000 + 10;int n, m, parent[maxn], childNum[maxn], sum;struct Edge { int u, v, val;} edge[maxn];vector<Edge> ans;bool cmp(const Edge & s1, const Edge & s2) { return s1.val < s2.val;}int UFind(int u) { return parent[u] == u ? u : UFind(parent[u]);}bool join(int u, int v) { int root1 = UFind(u); int root2 = UFind(v); if(root1 == root2) return false; //存在环 if(childNum[root1] > childNum[root2]) { //将节点数少的点连接到节点数量多的树上面 parent[root2] = root1; childNum[root1] += childNum[root2]; } else { parent[root1] = root2; childNum[root2] += childNum[root1]; }}bool kruskal() { sort(edge, edge + m, cmp); int sideNum = 0; //边的个数 for(int i = 0; i < m; i++) { if(join(edge[i].u, edge[i].v)) { sideNum++; sum += edge[i].val; ans.push_back(edge[i]); } if(sideNum == n - 1) return true; //如果边的个数到达n-1条,则最小生成树的构建完成 } return false;}int main(){ cout << "enter the number of vertexes and sides:" << endl; cin >> n >> m; for(int i = 0; i < n; i++) { //初始化 parent[i] = i; childNum[i] = 1; } sum = 0; for(int i = 0; i < m; i++) cin >> edge[i].u >> edge[i].v >> edge[i].val; ans.clear(); if(kruskal()) { cout << "kruskal path:" << endl; for(int i = 0; i < ans.size(); i++) cout << ans[i].u << "->" << ans[i].v << endl; cout << "the sum is:" << endl; cout << sum << endl; } else cout << "error" << endl; return 0;}
0 0
- HDU1162 --kruskal算法基础
- kruskal基础算法
- 一步一步复习数据结构和算法基础--kruskal算法
- 【算法设计与分析基础】24、kruskal算法详解
- Kruskal算法
- Kruskal算法
- Kruskal算法
- kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- kruskal算法
- kruskal算法
- kruskal算法
- Kruskal算法
- kruskal算法
- Kruskal算法
- Java集合(六):专用集合和遗留类
- ros安装
- Qt中与文件目录相关操作
- 关于mybatis中文参数查询不到结果
- iOS蓝牙4.0(BLE)-LightBlue与cc2540开发板通信
- kruskal基础算法
- iOS编程info.list文件参数作用
- block实现原理?
- 正则表达式
- opencl:一个关于向量赋值的异常
- 关于apache端口被占用
- 深入了解 Window和WindowManager
- typedef的使用
- FOJ有奖月赛-2016年4月(校赛热身赛) D 小茗的魔法阵