最小生成树(MST) Kruskal 算法
2014-02-18 23:49
253 查看
1、将所有的边按从小到大排序
2、依次将两点不在同一连通分量的边连接
用到的数据结构:并查集
2、依次将两点不在同一连通分量的边连接
用到的数据结构:并查集
//最小生成树 MST #include <iostream> #include <algorithm> using namespace std; #define MAX 100 int n, m; //n点, m边 int u[MAX], v[MAX], w[MAX]; //边的两个端点,权重 int p[MAX], r[MAX]; //父节点, 边序号 int cmp(const int a, const int b) { return w[a] < w[b]; } //间接排序比较函数 int find(int x) { return p[x] == x ? x : p[x] = find(p[x]);} //并查集的find int Kruskal() { int ans = 0; for(int i = 0; i < n; i++) p[i] = i; //初始化并查集 for(int i = 0; i < m; i++) r[i] = i; //初始化边序号 sort(r, r+m, cmp); //给边排序 for(int i = 0; i < m; i++) { int e = r[i]; int x = find(u[e]), y = find(v[e]); //找到当前边两个端点所在的集合 if(x != y) { ans += w[e]; p[y] = x;} //如果不在同一集合,合并 } return ans; }
相关文章推荐
- 最小生成树(MST)----普里姆(Prim)算法与克鲁斯卡尔(Kruskal)算法
- kruskal最小生成树(MST)算法
- POJ 1861 Network [最小生成树算法MST-kruskal 数据结构-并查集 union-find sets]
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- 【算法】图论_最小生成树(MST)_Kruskal
- 算法整理:最小生成树(mst)-Prim+Kruskal
- 最小生成树MST-克鲁斯卡尔(Kruskal)算法
- java实现图的最小生成树(森林)MST克鲁斯卡尔(Kruskal)算法
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- 转 最小生成树(kruskal 算法 和prim算法)
- 算法提高 最小方差生成树 (kruskal)
- 贪心算法_最小生成树_Kruskal(克鲁斯卡尔)算法
- Graph的算法实现: 寻找一幅图的最小生成树(MST)
- 数据结构基础6.3:最小生成树MST(Prim、Kruskal)
- 数据结构与算法分析(Java语言描述)(32)—— 使用 Kruskal 算法求有权图的最小生成树
- 最小生成树之克鲁斯卡尔(kruskal)算法
- 算法复习 - 最小生成树算法 Prim、Kruskal(普里姆算法、 克鲁斯卡尔算法)
- 邻接表存储 - Kruskal最小生成树算法
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- kruskal与prim最小生成树算法