您的位置:首页 > 其它

并查集模板

2012-04-13 13:55 190 查看
貌似这么短的代码也不需要什么模板。。但还是写出来装下逼吧。。

带路径压缩的查找算法,需要对p[i]初始化为i,1<=i<=n,n是集合元素个数

int find(int x){
int r,t,i;
r=x;
while(r!=p[r])
r=p[r];
i=x;
while(i!=r){
t=p[i];
p[i]=r;
i=t;
}
return r;
}


按秩合并算法,需要对rank[i]初始化为0,1<=i<=n,n是集合元素个数,还要注意,该函数的使用前提是ra!=rb

void merge(int ra,int rb){
if(rank[ra]==rank[rb]){
p[rb]=ra;
rank[ra]++;
}else{
if(rank[ra]>rank[rb])
p[rb]=ra;
else
p[ra]=rb;
}
}

初始化

void init(int n){
int i;
for(i=1;i<=n;i++)//默认编号是1到n,n是集合元素个数
p[i]=i,rank[i]=0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 merge