您的位置:首页 > 其它

图算法总结----Kruskal算法

2017-03-18 22:19 183 查看
//
// Created by liyuanshuo on 2017/3/13.
//

#include <bits/stdc++.h>

int r[10010]; //the rank of every side
int u[10010], v[10010], w[10010]; // u, v is the pointer of i-th side of graph, w---weight
int p[10010];  // p-array used to union-find set
int n, m; //n--numbers of nodes m--numbers of sides

//cmp -- function used to sort
int cmp (const int i, const int j )
{
return w[i] < w[j];
}

//union_find_set
int find( int x )
{
return p[x] == x ? x : p[x] = find (p[x]);
}

int Kruskal( )
{
int ans = 0;
for (int i = 0; i < n; ++i)
{
p[i] = i;
}
for (int j = 0; j < m ; ++j)
{
r[j] = j;
}
std::sort( r, r+m, cmp);
for (int k = 0; k < m ; ++k)
{
int e = r[k];
int x = find (u[e]);
int y = find (v[e]);
if( x != y )
{
ans += w[e];
p[x] = y;
}
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 图算法