码迷,mamicode.com
首页 > 其他好文 > 详细

好东西并查集

时间:2015-03-09 22:17:59      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

今天在做杭电BestCoder30期题目的时候遇到了问题,于是看了解决方案说是要用到并查集,于是就知道了这个神奇的东西。

简单介绍一下并查集:

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。

集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的数组所在的集合合并。
 
简单的并查集由两个函数和一个数组组成:
1.数组Pre[]:  
  数组Pre[x]用于存储集合中的点x的前导节点,用来判断两个点是否在同一个集合中。
2.两个函数:
  函数find(int x)用于查找一个集合中的代表点,代表点即集合的根节点,是一个集合的标志。函数union(int x,int y)用来合并两个具有相同有关系的集合。
 
下面是两个函数的代码:(数据存储采用数组存储)

int pre[1000 ]; 

int find(int x)                                                                                                     

    int r=x;

    while ( pre[r ] != r )                                          

          r=pre[r ];

    int i=x , j ;

    while( i != r )    //路径压缩,为了节省后续节点的查找时间

    {

         j = pre[ i ]; 

         pre[ i ]= r ; 

         i=j;

    }

    return r ;

}

void union(int x,int y)  //合并两个集合,同时也是在初始时构造并查集的函数

{

    int fx=find(x),fy=find(y);

    if(fx!=fy)

        pre[fx ]=fy;

}

好东西并查集

标签:

原文地址:http://www.cnblogs.com/daimadebanyungong/p/4324482.html

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