Я пытаюсь создать простой hasCycle()
метод, который обнаруживает цикл в графе, но я сталкиваюсь с некоторыми проблемами в нем.
Код, который я использую:
public static boolean hasCycle(Graph g, Vertex prev, Vertex u, Set<Vertex> known) {
known.add(u);
for(Vertex temp : g.getNeighbours(u)){
if(!known.contains(temp)){
if(hasCycle(g,u,temp,known))
return true;
else if(temp != prev)
return true;
}
}
return false;
}
public static boolean hasCycle(Graph g) {
Set<Vertex> known = new TreeSet<>();
for(Vertex u : g.getAllVertices()){
known.add(u);
return hasCycle(g,u,u,known); // is this correct, how do I overload this method
}
return false;
}
Когда я проверяю его на вход, подобный этому:
public static void main(String[] args){
Graph g = new Graph();
Vertex v = new Vertex(0);
Vertex w = new Vertex(1);
g.addVertex(v);
g.addVertex(w);
g.addEdge(v, w);
System.out.println(hasCycle(g)); // this is printing true
}
И
public static void main(String[] args){
Graph g = new Graph();
Vertex v = new Vertex(0);
g.addVertex(v);
g.addEdge(v, v);
System.out.println(hasCycle(g)); // this is printing false
}
Я не могу понять, что происходит не так. Буду признателен за любую помощь.