基础 并查集

来源:互联网 发布:软件测试很难吗 编辑:程序博客网 时间:2024/05/21 06:38

并查集是一种树型的数据结构,是若干个不相交集合,能够实现较快的合并和元素判断的操作。常常在使用中以森林来表示。在这里主要介绍的是普通并查集,很多情况下使用的并查集是需要扩展的,根据使用情况的不同,有很多差别,因自身知识不足,不多介绍,以后添加。

基础并查集伪代码:

#include <iostream>using namespace std;#define Size 1000int a[Size]; //初始化并查集int init(){for(int i=0;i<Size;i++)a[i]=i;}  //无路径压缩的查找根节点 int find(int x){while(a[x]!=x)x=a[x];return x;}//合并两个元素所在的集合int merage(int x,int y){x=find(x);y=find(y);if(x!=y)a[x]=y;}int main(){...return 0;}

压缩路径:

int find(int x){int q,p;p=x;while(a[x]!=x)//找根节点 x=a[x];while(p!=x)//压缩路径,修改路径中所有节点 {q=a[p];a[p]=x;p=q;}return x;}
merage中还有一个启发模式,就是把深度小的集合合并到深度大的集合;

int merage(int b,int c){if(height(b)==height(c)){height(b)=height(c)+1;a[c]=b;}else if(height(b)<height(c)) a[b]=c;else a[c]=b;}


0 0
原创粉丝点击