使用基于堆栈的DFS在有向图中循环检测

时间:2017-05-02 07:16:28

标签: java graph directed-acyclic-graphs dfs

在algo堆栈溢出异常后失败。请告诉我如何更正定向图中的循环检测,或者如果可能的话,有人可以根据堆栈而不是递归来提供算法。

public boolean hasCycle(Graphnode<T> n) {

    n.setMark(IN_PROGRESS);

    for (Graphnode<T> m : n.getSuccessors()) {
        if (m.getMark() == IN_PROGRESS) {
            return true;
        }

        if (m.getMark() != DONE) {
            if (hasCycle(m)) {
                return true;
              }
        }
    }

    n.setMark(DONE);

    return false;
}

谢谢, 维克兰特

1 个答案:

答案 0 :(得分:1)

我很久没有做过这种事了,但是你的代码看起来很怪异。 你的第一个if条件是:

if (m.getMark() == IN_PROGRESS) {

return true;
}

我认为应该是这样的:

if (m.getMark() == IN_DONE) {

return true;
}

如果没有,m.getMark() == IN_PROGRESSm.getMark() != DONE之间有什么区别?你的第二个if条件永远不会被触发。

注意:如果你经历过SO,你会发现很多使用DFS或堆栈的算法......