首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铰接点忽略通向直接父节点的边的反向

铰接点忽略通向直接父节点的边的反向
EN

Stack Overflow用户
提问于 2019-10-01 19:50:51
回答 1查看 48关注 0票数 0

从普林斯顿Articulation Point的算法过程中,衔接算法dfs()忽略了指向v的边缘的反向。但是,当反向边缘指向直接父级时,为什么我们不能使用它?请参考这部分代码

代码语言:javascript
复制
    // **low number - ignore reverse of edge leading to v. Why is this???**
    else if (w != u)
        low[v] = Math.min(low[v], pre[w]);

完整的代码如下。

代码语言:javascript
复制
private void dfs(Graph G, int u, int v) {
    int children = 0;
    pre[v] = cnt++;
    low[v] = pre[v];
    for (int w : G.adj(v)) {
        if (pre[w] == -1) {
            children++;
            dfs(G, v, w);

            // update low number
            low[v] = Math.min(low[v], low[w]);

            // non-root of DFS is an articulation point if low[w] >= pre[v]
            if (low[w] >= pre[v] && u != v) 
                articulation[v] = true;
        }

        // **low number - ignore reverse of edge leading to v. Why is this???**
        else if (w != u)
            low[v] = Math.min(low[v], pre[w]);
    }

    // root of DFS is an articulation point if it has more than 1 child
    if (u == v && children > 1)
        articulation[v] = true;
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-02 01:24:02

根据此算法的定义(link-1):

_

  • _prev是v的DFS-preorder索引,换句话说,是该顶点在DFS树中的深度;

_

  • _

_v是DFS树中v的所有后代(包括v本身)的邻居的最低深度_

因此,在调用DFS(G, u, v)期间,我们不应该检查反向边(v->u),因为顶点u是v的祖先,因此不应该在low[v]计算中考虑它。

更多解释可以在这里找到:link-2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58184233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档