C++版并查集

大年初一的, 复习了一下并查集, 用的教材上面写的并查集实际上用起来总感觉很别扭, 比如索引不是从0开始, 没有对处于同一集合内的元素作判断, 以及用了树作为存储集合根结点的数据结构, 于是便自己写了个C++版的.

vector<int> parents;
int find_mfset(int i,int j=0){
    if(i<0 || i>parents.size()) return -1;
    for(j=i;parents[j]>=0;j=parents[j]);
    return j;
}

void merge_mfset(int i,int j){
    if (i<0 || i>parents.size() || j<0 || j>parents.size()) return;
    int pi = find_mfset(i);
    int pj = find_mfset(j);
    if(pi==pj) return;
    if (pi > pj) {
	    parents[pj] += parents[pi];
	    parents[pi] = pj;
    } 
    else {
	    parents[pi] += parents[pj];
	    parents[pj] = pi;
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注