kruskal最小生成树

方便模板套用,最开始记不住,多敲几遍就好了
#include<iostream>
#include<algorithm>

using namespace std;
const int maxn = 10005;
struct node{
	int from,to,dis;
	
}edge[maxn];
int n,fa[maxn],m,ans,q;
bool cmp(node a,node b)
{
	return a.dis<b.dis;
	
}
int find(int x)
{
	if(fa[x]==x)
	return x;
	return fa[x]=find(fa[x]);
}
void mix(int x,int y)
{
	x=find(x),y=find(y);
	if(x!=y) fa[y]=x;
}
int kruskal()
{
	sort(edge,edge+m,cmp);  
	for(int i=0;i<=n;i++)
	{
		fa[i]=i;   //初始化 
	}
	ans=0;
	for(int i=0;i<m;i++)
	{
		if(find(edge[i].from)!=find(edge[i].to))
		{
			mix(edge[i].from,edge[i].to);
			ans+=edge[i].dis;
		}
		
	
	}	
	return ans;
}

猜你喜欢

转载自blog.csdn.net/henu_xujiu/article/details/79202790