zoukankan      html  css  js  c++  java
  • 并查集操作

    #include <bits/stdc++.h>
    using namespace std;
    #define MAX 100
    class UnionSet{
        private:
            int data[MAX+1];//即上级数组
        public:
            UnionSet(int len){
                for(int i=1;i<=len;i++) data[i]=i;
            }
            
            //将 a b 合并为一个集合里的元素,当然对应的下级也都合并了
            UnionSet merge(int a,int b){
                int aa=this->find(a);
                int bb=this->find(b);
                //如果不是同一个集合
                //当然忽略具体的上级关系,反正加入了集合
                if(aa!=bb)
                    data[aa]=data[bb];
                return *this;
            }
    
            //找x对应的顶级上级名字,并且顺道把把经过的路径修改成顶级上级的名字,加速下次查找
            //这是路径压缩算法,目前最优的算法,时间复杂度无限接近于O1
            //递归,借助于系统的栈,需要的空间小
            int find(int x){
                return x==data[x]?x:data[x]=find(data[x]);
            }
    
            //非递归,这种做法不好
            // int find(int x){
            //     int k=x,*a=new int[MAX],index=0;//可以看出这种算法需要很大的空间
            //     while(k!=data[k]){
            //         a[index++]=k;
            //         k=data[k];
            //     }
            //     for(int i=0;i<index;i++)
            //         data[a[i]]=k;
            //     delete[] a;
            //     return k;
            // }
    
            bool connected(int x,int y){
                return find(x)==find(y);
            }
    
            void show(int len){
                for(int i=1;i<=len;i++) cout<<data[i]<<" ";
                cout<<endl;
            }
    };
    int main(){
        UnionSet us(100);
        us.show(10);
        us.merge(1,2).merge(3,4);
        us.merge(3,4);
        us.show(10);
        us.merge(1,3);
        us.show(10);
        cout<<us.connected(1,4)<<endl;
        us.show(10);
        return 0;
    }
  • 相关阅读:
    电池的并联与串联
    [转]为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?
    go module
    thinkPHP5.1自动生成目录结构
    java多线程-锁分析
    Walle 2.0(瓦力)的安装
    轻量日志系统Loki
    Zabbix5.0的安装(超详细)
    政策制定的艺术
    浅谈对golang中的defer,panic,recover理解
  • 原文地址:https://www.cnblogs.com/MorrowWind/p/13056304.html
Copyright © 2011-2022 走看看