并查集

算法

参考

并查集:1个数组+3个函数

作用:1.判断无向图的连通性 ......

模板:

//并查集 1个数组+3个函数 
int pre[N];//N为结点数

void init(int n) //函数1 初始化 
{
	for(int i=0;i<=n;i++)
	  pre[i]=i;
}

int find(int x)//函数2 查找x的祖先 
{
	int r=x;
	while(r!=pre[r])
	  r=pre[r];
	//路径压缩
	while(x!=pre[x])
	{
		int i=pre[x];
		pre[x]=r;
		x=i;
	}
	return x; 
}

bool join(int x,int y)  //函数3 将x和y合并在一起
{
	int fx=find(x);//fx为x的祖先 
	int fy=find(y);//fy为y的祖先 
	if(fx!=fy)//如果不是同一个祖先 
	{
		pre[fx]=fy;//将fx的祖先设置为fy 
		return true;
	}
	return false;	
} 

 

你可能感兴趣的:(数据结构)