我使用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語句。有沒有簡化它的方法? –