Cycle Detection
Intro
Detect Cycle in Directed Graph
// return true if cycle is detected, false if the graph acyclic
boolean cycleDFS(Map<Integer, List<Integer>> graph, Integer visit,
Set<Integer> visited, Set<Integer> onStack) {
// previsit
visited.add(visit);
onStack.add(visit);
// visit each neighbor
for (Integer neighbor : graph.get(visit)) {
if (!visited.contains(neighbor) &&
cycleDFS(graph, neighbor, visited, onStack)) {
return true;
} else if (onStack.contains(neighbor)) {
// back edge
return true;
} else {
// cross or forward
// do nothing
}
}
// postvisit
onStack.remove(visit);
return false;
}Detect Cycle in Undirected Graph
Reference
Last updated