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或堆栈的算法…如果我的答案对您有所帮助,请随时将此问题标记为已解决