码迷,mamicode.com
首页 > 编程语言 > 详细

用并查集实现 kruskal算法

时间:2016-09-10 23:55:11      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

/**
并查集实现克鲁斯卡尔算法
6
1 2 6
2 4 1
1 4 2
1 3 1
3 5 4
4 5 3
**/
#include<iostream>
#include<vector>
#include<algorithm>
#define MAX_N 100
using namespace std;

struct Node
{
int numr;
int numd;
int val;
};

int cmp(Node a,Node b)
{
return a.val<b.val;
}
vector<Node> v;
int F[MAX_N];
int findPar(int n)
{
if(F[n]==n)
{
return F[n];
}
else
{
F[n]=findPar(F[n]);
return F[n];
}
}
int merges(int a,int b)
{
int x=findPar(a);
int y=findPar(b);
if(x==y)
{
return 1;
}
else
{
F[y]=x;
return 0;
}
}
int main()
{
for(int i=0;i<MAX_N;i++)
{
F[i]=i;
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
Node nod;
cin>>nod.numr>>nod.numd>>nod.val;
v.push_back(nod);
}
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++)
{
if(!merges(v[i].numr,v[i].numd))
{
v1.push_back(v[i]);
}
}
return 0;
}

用并查集实现 kruskal算法

标签:

原文地址:http://www.cnblogs.com/NarcissusBlog/p/5860679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!