zoukankan      html  css  js  c++  java
  • 并查集的一些理解

    并查集:一种树型的数据结构,用于处理不交集的合并及查询问题。

    先直接给出代码:

     1 // 初始化F[i]=i;即每个节点的父节点都是自己
     2 
     3 // 查找一个数据属于哪一个集合,也就是返回这个集合的根节点
     4 int find(int x){
     5 // 查找根节点,根节点就代表着一个集合
     6 int b=x;
     7 while(F[x]!=x) x=F[x];
     8  // 路径压缩,将路径上的每个点指向根节点x
     9 while(F[b]!=x){
    10 int p=F[b];    // 当前节点的父节点
    11 F[b]=x;       // 本节点指向根节点
    12 b=p;           // 因为当前元素可能是热元素,为加速这个元素的查找,父节点也要继续指向根节点哦;
    13 // 子节点的话还是先跟在我后面吧,下次查到你或你的子孙节点再说;
    14 }
    15 return x;
    16 }
    17 
    18 // 合并集合:把两个根节点合并(一个根节点做为另一个根节点的子节点)
    19 int Union(int x,int y){
    20 F[find(x)]=find(y);
    21 return find(y);
    22 }
    23  

    假设我们现在有6个集合{0}{1}{2}{3}{4}{5},

    • 先合并0和1:F[0]=1;    1->0  
    • 再合并0和2:F[1]=2;     2->1->0
    • 再合并0和3:F[2]=3;     3->2->{1,0}

    如果需要统计集合的个数,以及集合中元素的个数,那就这么改

     

    心之所愿,永不相忘
  • 相关阅读:
    Python进阶03 模块
    Python进阶02 文本文件的输入输出
    Python进阶01 词典
    Python基础10 反过头来看看
    Python基础09 面向对象的进一步拓展
    Python基础08 面向对象的基本概念
    Python基础07 函数
    Vuex源码分析(转)
    Vue2.x双向数据绑定
    Angular2的双向数据绑定
  • 原文地址:https://www.cnblogs.com/zgll/p/15508423.html
Copyright © 2011-2022 走看看