当前位置 : 主页 > 编程语言 > 其它开发 >

并查集

来源:互联网 收集:自由互联 发布时间:2022-05-30
并查集是一种多叉树,用于处理一些不相交集合的合并与查询问题。 初始化 每个结点单独作为一个集合。 查询 求元素所在集合的代表元素,即根结点。 合并 将两个元素所在的集合合

并查集是一种多叉树,用于处理一些不相交集合的合并与查询问题。

初始化

每个结点单独作为一个集合。

查询

求元素所在集合的代表元素,即根结点。

合并

将两个元素所在的集合合并为一个集合。

合并之前,应先判断两个元素是否属于同一集合,用上面的查询来实现。

实现流程

动态集合中每一个元素由一个对象来表示,设x表示一个对象,并查集的实现需要如下操作:

MAKE(X)

建立一个新的集合,由于各集合是分离的,要求x没有在其他集合中出现过。

UNION(X,Y)

将包含x和y的动态集合合并为一个新的集合,假定在此操作前这两个集合是分离的。

所得集合的代表是Sx∪Sy的某个成员。

FIND(X)

返回包含x的集合的代表。

路径压缩

将元素的父亲指针全部指向根节点。

总结

初始化,

for(i=1;i<=n;i++)father[i]=i;

每个元素属于单独的一个集合,以自己作为根结点。

寻找根结点编号并压缩路径,

int find(int x){ 
	if(father[x]!=x) 
   father[x]=find(father[x]);
   return father[x];
   }

合并两个集合,

void unionn(int x,int y){
	x=find(x);
	y=find(y);
	father[y]=x; 
	}

判断元素是否属于同一集合,

bool judge(int x,int y){
	x=find(x);
   y=find(y);
   if(x==y)  
		return true;
	else 
		return false;
	}

并非原创,仅是整理,请见谅

Lo问我为什么看星星。我觉得银河和代码是同一种东西,这也是一种回答。————Co 【文章原创作者:韩国高防服务器 http://www.558idc.com/krgf.html 网络转载请说明出处】
上一篇:Bitmap算法小结
下一篇:没有了
网友评论