【发布时间】:2013-12-12 05:25:07
【问题描述】:
我编写了代码,用于使用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;
}
【问题讨论】:
-
你期望哪个数字,算法返回什么?
-
我期望 2 因为有两个周期,但它只返回一个
-
另外,我发现我的
isCyclicDirected方法中有太多的返回语句。有没有办法简化它? -
如果您需要其他部分代码,我可以添加它们
-
在 if / else 中,我会先把短大小写放在首位,特别是如果这样可以避免一个 not。此外,如果您有条件地返回,那么之后您就不需要明确的 else。
标签: java graph depth-first-search directed-graph cyclic-graph