新手适用“并查集“简单教学

并查集的概念

在计算机科学中,并查集是一种树形的数据结构,用于处理不交集的合并(union)及查询(find)问题。可用于查询网络中两个节点的状态,这里的网络是一个抽象的概念, 不仅仅指互联网中的网络, 也可以是人际关系的网络、交通网络,路径关系等。

并查集 除了可以用于查询 网络 中两个节点的状态, 还可以用于数学中集合相关的操作, 如求两个集合的并集等。

并查集 对于查询两个节点的 连接状态 非常高效。对于两个节点是否相连,也可以通过求解 查询路径 来解决, 也就是说如果两个点的连接路径都求出来了,自然也就知道两个点是否相连了,但是如果仅仅想知道两个点是否相连,使用 路径问题 来处理效率会低一些,并查集 就是一个很好的选择。(这段是从网络中查找的比较官方的概念)。

并查集的适用情况

并查集是一种算法可以用来判断相互关联(同属一个集合)的元素属于几个集合,也可以用来判断图结构中的两点是否是联通的。

从我的自身经验来看,通俗一点的回答就是判亲戚(如果a和b是亲戚,b和c是亲戚,那么a和c也是亲戚)(是亲戚就意味着祖先是相同的【可能举例不恰当,为了方便理解】,血缘的根是相同的),连村子(如果甲村修了路可以去乙村,乙村又修路去了丙村,那么甲村也可以去到丙村)这样的关系问题;又或者是修电线呀等等,都是基本一样的。

介绍根,父结点与子结点,深度。(图)

在这里插入图片描述
图中,a为b,c,d,e,f,G的根,a 又是 b , c 的父结点,b , c 是 a 的子结点,又分别是d, e 与 f 的父结点。

基本函数

1.初始化

//对父结点和深度进行初始化
void init(int parent[],int mark[])      //参数:传入每一个元素的父结点数组,深度数组    
{
   

    int i;                              //利用i遍历
    for(i=0; i<maxn; i++)
    {
   
        parent[i]=-1;                   //先初始化各自的第一条根(父结点)为他本身
        mark[i]=0;                      //深度初始化为0
    }
}

将每一个初始元素的父结点定义为-1,深度定义为0。

2.找根(找每一个传过来的元素的根)

 //找最终根结点
 int finds(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值