Fmsets并查集类初步实现

来源:百度文库 编辑:神马文学网 时间:2024/04/28 09:09:45
Fmsets并查集类初步实现:
class Fmsets {
    int n_, *parent_;
public:
    Fmsets(int n ) : n_(n) {
        parent_ = (int*)::malloc(n * sizeof(int));
        std::fill(parent_, parent_ + n, -1);
    }
    ~Fmsets(void){ ::free(parent_); }
    int simple_find(int i) const{ //查找节点i的根;
        for( ; parent_[i] >= 0; i = parent_[i]) { }
        return i;
    }
    void simple_merge(int i, int j){ parent_[i] = j;}
    bool find_merge(int i, int j) {
        i = simple_find(i);
        j = simple_find(j);
        if(i == j)
        return false;
        simple_merge(i, j);
        return true;
    }
};