blob: 2c6c0950ea47d6cbba9dfa84dcd7542be21da740 [file] [log] [blame]
operation hasLoop(n) : Boolean {
for (n in Node.all) {
n.~status = 0; // not visited yet
}
return hasLoopAux(n);
}
operation hasLoopAux(n) : Boolean {
if (n.~status == 2) {
// We already visited this node and did not find any loops
return false;
}
else if (n.~status == 1) {
// We have returned to a node through its outgoing edges: we found a loop
return true;
}
n.~status = 1;
for (e in n.outgoing) {
if (hasLoopAux(e.target)) {
return true;
}
}
n.~status = 2;
return false;
}