我编写了用于计算有向图中的循环数的代码DFS
。检查循环是否存在的方法工作正常。我现在遍历所有顶点(我在 HashMap 中)并检查是否有一个顶点未被访问,然后检查是否存在循环,如果存在则将计数器加 1。现在代码中断,它没有给出正确的数字循环例如:对于具有以下边的图:
(A B),(B C),(C E),(E A),(B E)
这是我的代码;
public int getTotalCyclesinDir(){
clearAll();
int count=0;
for (Vertex v : vertexMap.values()) {
if (!v.isVisited && isCyclicDirected(v))
count++;
}
return count;
}
public boolean isCyclicDirected(Vertex v){
if (!v.isVisited){
v.setVisited(true);
Iterator<Edge> e = v.adj.iterator();
while (e.hasNext()){
Vertex t = e.next().target;
if (!t.isVisited) {
if (isCyclicDirected(t))
return true;
}
else return true;
}
return false;
}
else return true;
}