码迷,mamicode.com
首页 > 编程语言 > 详细

并查集模板(算法)

时间:2018-05-20 18:07:32      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:个数   size   记录   ++   直接   查找   数组   col   算法   

并查集是由一个数组pre[],和两个函数构成的,一个函数为find()函数,用于寻找前导点的,第二个函数是combine()用于合并路线的

 1 int findx(int x)
 2 {
 3     int a;
 4     a=x;
 5     while(pre[a]!=a)///循环方法查找任意一个城市的前导点
 6     {
 7         a=pre[a];
 8     }
 9     /*if(pre[x]!=x)///递归方法查找任意一个城市的前导点
10     {
11         pre[x]=findx(pre[x]);
12     }*/
13     int i=x,j;
14     while(i!=a)
15     {
16         j=pre[i];///记录x的前导结点
17         pre[i]=r;///将i的前导结点设置为r的根节点.
18         i=j;
19     }
20     return a;
21 }

路径压缩为了加快查找的速度,将x点与其根节点直接相连,构造成类似于只有叶子结点而没有分支结点的树

 1 void combine(int x,int y)
 2 {
 3     int a,b;
 4     a=findx(x);///x的根节点为a
 5     b=findx(y);///y的根节点为b
 6     if(a!=b)///如果a,b不是相同的根节点,则说明ab不是连通的
 7     {
 8         pre[a]=b;///将a,b连接,将a的前导点设置为b
 9     }
10 }

初始化,我们将每一个结点的前导结点设置为自己,如果在combine函数时未能形成连通,将独立成点。

1 for(i=1; i<=n; i++)
2 {
3    pre[i]=i;///每一个城市的前导点都是自身
4 }

 

并查集模板(算法)

标签:个数   size   记录   ++   直接   查找   数组   col   算法   

原文地址:https://www.cnblogs.com/wkfvawl/p/9063836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!