初始化Array C ++

时间:2015-01-19 21:49:06

标签: c++ arrays union-find

我的代码试图实现union-find算法,我有id []数组和sz []数组。我在Union-Find构造函数中初始化它们,但是一旦我尝试在Union-Find类中的方法中使用这些数组,它就会将所有数组值更改为1.我不明白为什么。是否有一些我不知道的东西?

H档

class UnionFind{
public:
    UnionFind(int size);
    void join(int x, int y);
    int connected(int x, int y);
    int find(int x);

private:

    int size;
    int id[];
    int sz[];

};

CPP档案

UnionFind::UnionFind(int size){
        this->id[size] = id[size];
        for(int i = 0; i < size; i++){
            id[i] = i;
        }
        for(int i = 0; i < size; i++){
            sz[i] = 1;
        }
    }

    int UnionFind::find(int l){
        //Path Compression Finding the Root
        for(int i = 0; i < 5; i++){
        }
        while(l != id[l]){
            id[l] = id[id[l]];
            l = id[l];
        }
        return l;

    }

    void UnionFind::join(int x, int y){
        int m = find(x);
        int n = find(y);

        if(sz[m] < sz[n]){
            id[m] = n;
            sz[n] += sz[m];
        }
        else{
            id[n] = m;
            sz[m] += sz[n];
        }
    }

    int UnionFind::connected(int x, int y){
        if(find(x) == find(y)){
            return 1;
        }
        else{
            return 0;
        }
    }

1 个答案:

答案 0 :(得分:2)

来自评论。

  • 您不能将int id[]作为班级成员,
  • 使用std::vector(调整大小并填写构造函数),
  • 您忘记在构造函数中设置成员size
  • 您的查找算法使用路径减半而非路径压缩(这不会影响运行时间)。

附注:您可以使用单个数组/向量来实现不相交的集数据结构。