Java 基于堆栈的DFS有向图循环检测

Java 基于堆栈的DFS有向图循环检测,java,graph,directed-acyclic-graphs,microsoft-distributed-file-system,Java,Graph,Directed Acyclic Graphs,Microsoft Distributed File System,堆栈溢出异常后,以下算法失败。请让我知道如何在有向图中进行循环检测,或者如果可能的话,有人可以提供基于堆栈而不是递归的算法 public boolean hasCycle(Graphnode<T> n) { n.setMark(IN_PROGRESS); for (Graphnode<T> m : n.getSuccessors()) { if (m.getMark() == IN_PROGRESS) { ret

堆栈溢出异常后,以下算法失败。请让我知道如何在有向图中进行循环检测,或者如果可能的话,有人可以提供基于堆栈而不是递归的算法

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;
}
公共布尔hasCycle(图形节点n){
n、 设定标记(正在进行中);
对于(Graphnode m:n.getSuccessivers()){
如果(m.getMark()==正在进行中){
返回true;
}
如果(m.getMark()!=完成){
if(周期(m)){
返回true;
}
}
}
n、 设定标记(完成);
返回false;
}
谢谢,
Vikrant

我很长时间没有做这种事情了,但是你的代码看起来很奇怪。 您的第一个if条件是:

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

return true;
}
我认为应该是这样的:

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

return true;
}
如果没有,则
m.getMark()==正在进行中
m.getMark()!=完成
?您的第二个if条件从未触发


注意:如果您仔细阅读,您将发现许多使用DFS或堆栈的算法…

如果我的答案对您有所帮助,请随时将此问题标记为已解决