我使用DFS
编写了用于计算有向图中周期数的代码。检查循环是否存在的方法工作正常。我现在迭代所有顶点(我在HashMap中),并检查顶点是否未访问,然后检查循环是否存在,如果是这样,则递增计数器1.现在代码中断,它不会给出正确的数字例如:对于具有以下边缘的图:用于循环检测的代码未找到在Java中的有向图中返回正确的循环次数?
(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;
}
您希望得到哪个数字?算法返回什么? –
我期望2,因为有两个周期,但它只返回一个 –
另外,我看到在我的'isCyclicDirected'方法中有太多的return语句。有没有简化它的方法? –