在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;
}
谢谢, 维克兰特
答案 0 :(得分:1)
我很久没有做过这种事了,但是你的代码看起来很怪异。 你的第一个if条件是:
if (m.getMark() == IN_PROGRESS) {
return true;
}
我认为应该是这样的:
if (m.getMark() == IN_DONE) {
return true;
}
如果没有,m.getMark() == IN_PROGRESS
和m.getMark() != DONE
之间有什么区别?你的第二个if条件永远不会被触发。
注意:如果你经历过SO,你会发现很多使用DFS或堆栈的算法......