实现Kruskal算法,求图的最小生成树。
来源:互联网 发布:淘宝高颜值零食店铺 编辑:程序博客网 时间:2024/05/17 06:02
输入:顶点编号及边权重。例:
0 1 10
0 2 151
1 2 50
输出:最小生成树。例:
0 1 10
0 2 15
源代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Edge{
int x;
int y;
int w;
};
const int MAXN = 100;
int pa[MAXN];
int rank[MAXN];
int cmp(Edge a,Edge b){
return a.w < b.w;
} //交换函数,按从小到大排序
void make_set(int x){
pa[x] = x;
rank[x] = 1;
} //初始化函数
int find_set(int x){
if(x != pa[x])
pa[x]=find_set(pa[x]);
return pa[x];
}
bool union_set(int x,int y){
x = find_set(x);
y = find_set(y);
if(x == y)
return false;
if(rank[x] > rank[y])
{
pa[y] = x;
}
else{
pa[x] = y;
if(rank[x] == rank[y])
rank[y]++;
}
return true;
} // 并查集
int main()
{
int n, ltotal;
Edge edge[MAXN];
scanf("%d", &n);
while(n--)
{
int v,l;
scanf("%d%d", &v, &l);
ltotal = 0;
for(int i = 1;i <= v;i++)
make_set(i);
for(int i = 1; i <= l ; i++)
{
scanf("%d%d%d", &edge[i].x, &edge[i].y, &edge[i].w);
}
sort(edge + 1, edge + 1 + l, cmp);
for(int i = 1; i <= l; i++)
{
if(union_set(edge[i].x, edge[i].y))
{
ltotal++;
printf("%d %d %d\n",edge[i].x,edge[i].y,edge[i].w);
}
if(ltotal == v - 1)
{
break;
}
}
}
return 0;
}
- 实现Kruskal算法,求图的最小生成树。
- Kruskal算法求最小生成树的c++代码实现
- 求最小生成树的Kruskal算法
- 最小生成树Kruskal算法的实现
- 图的最小生成树:Kruskal算法实现
- 图的最小生成树 Kruskal算法 C++实现
- C语言实现图的Kruskal最小生成树算法
- 【算法——Python实现】有权图求最小生成树Kruskal算法
- Kruskal算法求最小生成树
- Kruskal 算法 求最小生成树
- 24.kruskal算法 求 最小生成树
- Kruskal算法(求最小生成树)
- Kruskal算法求最小生成树
- Kruskal 算法求最小生成树
- uva1395 Kruskal算法求最小生成树
- hdu1102 kruskal算法求最小生成树
- Kruskal算法求最小生成树
- Kruskal算法求MST(最小生成树)
- 【移动端】页面自适应布局—基于rem布局
- Karhunen-Loeve Transform (KLT) 原理及PCA应用
- Android中Viewpage+Fragment的简单实现
- jfinal jboss 多个数据源报错 Config already exists: main
- java中文乱码解决之道(3):编码详情:伟大的创想—Unicode编码
- 实现Kruskal算法,求图的最小生成树。
- android webview 二次验证流程分析 shouldOverrideUrlLoading深度分析
- Python Excel技术比较
- JavaScript的简介及特点
- Spring使用Cache、整合Ehcache
- 计算机图形学(二)输出图元_13_像素阵列图元
- SEO常用MATE整理
- Mac下导出protobuf协议到c#文件
- java中文乱码解决之道(4):java编码转换过程