美文网首页
算法分析与设计 并查集

算法分析与设计 并查集

作者: 余生如意 | 来源:发表于2019-10-11 20:29 被阅读0次

并查集学习笔记

并查集(union-find set)是一抽象数据类型。它所处理的是“集合”之间的关系,即动态地维护和处理集合元素之间复杂的关系,
当给出两个元素的一个无序对(a,b)时,需要快速“合并”a和b分别所在的集合,这其间需要反复“查找”某元素所在的集合。“并”、“查”和“集”三字由此而来。

合并元素所在集合、查找元素所在集合

数组实现

并查集支持的操作

MAKE(x):建立一个新的集合,其仅有的成员(同时就是代表)是x。由于各集合是分离的,要求x没有在其它集合中出现过。
UNIONN(x,y):将包含x和y的动态集合(例如Sx和Sy)合并为一个新的集合,假定在此操作前这两个集合是分离的。结果的集合代表是Sx∪Sy的某个成员。一般来说,在不同的实现中通常都以Sx或者Sy的代表作为新集合的代表。此后,由新的集合S代替了原来的Sx和Sy。
FIND(x):返回一个指向包含x的集合的代表。

查找

int find(int x) {  //用非递归的实现  
  while (father[x] != x) x = father[x];  
  return x;
  
}
int find(int x){//用递归的实现  
    if (father[x] != x){  
        return find(father[x]);  
    } else{  
        return x;  
    }   
}

合并

void unionn(int r1,int r2){
      father[r2] = r1;
  }
    int main(){
      cin >> n >> m;
      for (i = 1; i <= n; i++)
          father[i] = i;           //建立新的集合,其仅有的成员是i
      for (i = 1; i <= m; i++) {
          scanf("%d%d",&x,&y);
          int r1 = find(x);
          int r2 = find(y);
          if (r1 != r2){
                unionn(r1,r2);
            }   
      }    
      cin >> q;
      for (i = 1; i <= q; i++)  {
          scanf("%d%d",&x,&y);
          if (find(x) == find(y)){
                printf("Yes\n");
            } else {
                printf("No\n");
            }
      }
      return 0;
  }

相关文章

  • 算法分析与设计 并查集

    并查集学习笔记 并查集(union-find set)是一抽象数据类型。它所处理的是“集合”之间的关系,即动态地维...

  • 并查集练习

    并查集 参考《算法笔记》 三要素:并,查,集。 并差集与一个算法有关,kruskal算法,就可通过并查集实现。 1...

  • 从并查集Union Find算法谈算法解决实际问题的过程

    从并查集Union Find算法谈算法解决实际问题的过程算法并查集算法寻找路径 从并查集Union Find算法谈...

  • 深入理解并查集

    并查集是一种树形结构,它是由并查集算法进行维护的。而并查集算法(Union-find-algorithm),顾名思...

  • 并查集入门使用

    本文参考自《算法笔记》并查集篇 并查集的定义 什么是并查集?并查集可以理解为是一种维护数据集合的结构。名字中并查集...

  • 模板

    并查集 拓扑排序 Floyd算法 Dijkstra算法

  • 最小生成树

    Kruskal算法 伪代码: 并查集:

  • [算法] 并查集

    并查集维护元素的分组情况,可以处理不相交集合的合并及查询问题,用于求解图的连通等问题。 并查集使用树型结构实现(但...

  • 并查集算法

    看到个有意思的题 岛问题一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右四个位置相连,如果有一片1连在一...

  • 算法:并查集

    LeetCode经典题目 130. 被围绕的区域[https://leetcode-cn.com/problems...

网友评论

      本文标题:算法分析与设计 并查集

      本文链接:https://www.haomeiwen.com/subject/jbixmctx.html