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}

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

     

    心之所愿,永不相忘
  • 相关阅读:
    一、Flask_安装与使用
    Django_rest_framework(DRF)
    day_45_Django
    meta标签、利用媒体查询 link不同的CSS文件
    文本框设置:随内容增加而增高
    jquery 设置 html标签响应式布局
    CSS hack处理
    一些前端网址记录
    前端学习之路
    图片轮播(手动点击)
  • 原文地址:https://www.cnblogs.com/zgll/p/15508423.html
Copyright © 2011-2022 走看看