Kruskal算法(求最小生成树)
来源:互联网 发布:java doc 编辑:程序博客网 时间:2024/04/28 11:25
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define maxn 110 //最多点个数int n, m; //点个数,边数int parent[maxn]; //父亲节点,当值为-1时表示根节点int ans; //存放最小生成树权值struct eage //边的结构体,u、v为两端点,w为边权值{ int u, v, w;}EG[5010];bool cmp(eage a, eage b) //排序调用{ return a.w < b.w;}int Find(int x) //寻找根节点,判断是否在同一棵树中的依据,可以路径压缩{ if(parent[x] == -1) return x; return Find(parent[x]);}void Kruskal() //Kruskal算法,parent能够还原一棵生成树,或者森林{ memset(parent, -1, sizeof(parent)); sort(EG+1, EG+m+1, cmp); //按权值将边从小到大排序 ans = 0; for(int i = 1; i <= m; i++) //按权值从小到大选择边 { int t1 = Find(EG[i].u), t2 = Find(EG[i].v); if(t1 != t2) //若不在同一棵树种则选择该边,合并两棵树 { ans += EG[i].w; parent[t1] = t2; } }}int main(){ while(~scanf("%d%d", &n,&m)) { for(int i = 1; i <= m; i++) scanf("%d%d%d", &EG[i].u, &EG[i].v, &EG[i].w); Kruskal(); printf("%d\n", ans); } return 0;}
0 0
- Kruskal算法(求最小生成树)
- Kruskal算法求最小生成树 (最小堆优化)
- Kruskal算法求最小生成树
- Kruskal 算法 求最小生成树
- 24.kruskal算法 求 最小生成树
- Kruskal算法求最小生成树
- Kruskal 算法求最小生成树
- uva1395 Kruskal算法求最小生成树
- hdu1102 kruskal算法求最小生成树
- Kruskal算法求最小生成树
- Kruskal算法求MST(最小生成树)
- 求最小生成树Kruskal算法
- 水题 kruskal算法求最小生成树
- Kruskal算法求最小生成树
- 求最小生成树的Kruskal算法
- kruskal算法求最小生成树
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- C++ STL 迭代器算法模板
- cin.get getline cin.getline 区别以及‘n’是否留在缓冲区中
- 2.1.1 Remove Duplicates from Sorted Array
- 2014/8/10
- d堆
- Kruskal算法(求最小生成树)
- 使用反射时出现java.lang.NoSuchMethodException
- C++ STL Find算法模板
- android两次返回键退出的一些实现方法
- error C3872: "0xa0": 此字符不允许在标识符中使用
- win7-64bit 下oracle11g plsql 的正确安装
- 条件变量cond
- android Pair
- 空格和NULL值两码事