C ++中用于联合查找的自引用结构

问题描述

以下是union-find的Java实现,我希望在C ++中复制同样的内容:


class v_rank{
    int position,rank;
    v_rank parent;
    public v_rank(int position){
        this.position = position;
        rank = 0;
        parent = null;
    }
}
static v_rank find(v_rank v){
    if(v.parent == null)
        return v;
    v.parent = find(v.parent);
    return v.parent;
}

static void union(v_rank root1,v_rank root2){
    if(root1.rank < root2.rank)
        root1.parent = root2;
    else if(root1.rank > root2.rank)
        root2.parent = root1;
    else{
        root2.parent = root1;
        root1.rank++;
    }
}

我为C ++所做的尝试:

struct vert {
    int pos,rank;
    vert* par;
    vert(int pos) {
        this->pos = pos;
        rank = 0;
        par =  NULL;
    }
};

vert find(vert v) {
    if (v.par == NULL)
        return v;
    *(v.par) = find(*(v.par));
    return *(v.par);
}

与具有这种实现的Java不同,我无法将2 vert与简单的'=='进行比较。 我需要制作两个这样的顶点对,然后制作所有这样的顶点对(边)的向量。 我也有这个问题。

有人可以建议一种在cpp中复制Java代码的方法,这样我就可以检查两个“ verts”是否相等并使用成对的“ verts”向量吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...