0

私のコードはユニオン検索アルゴリズムを実装しようとしており、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;
        }
    }
4

1 に答える 1