微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。