来自无限循环的堆栈溢出 - 在修改的DFS中检测循环

时间:2013-04-24 16:03:55

标签: java cycle infinite-loop depth-first-search

此时我有点疯狂试图确定无限循环的来源(得到堆栈溢出错误)。我正在尝试实现修改后的DFS来检测图中的循环。我正在使用第11页的示例:http://www.cs.berkeley.edu/~kamil/teaching/sp03/041403.pdf

在此实现中,0 = WHITE,1 = GRAY,2 = BLACK。我希望我错过了一些比较简单的东西。

public boolean containsCycle()
 {
   for (int i=0; i<n; i++)
     marks[i] = 0; // Initialize all to zero - unvisited

   for (int i=0; i<n; i++) { // n = number of vertices in the graph
     if (marks[i]==0) {
       if (visit(i)){
         return true;
       }
     }
   }
   return false;
 }

public boolean visit(int index){
    marks[index] = 1; // Visited

    for (int i=0; i<n; i++){
       if(isArc(index,i)){ // isArc() returns true IFF there is a directed edge from index->
        if (marks[i]==1)
         return true;
      }
      else if (marks[i]==0) {
        if(visit(marks[i])) 
        return true;
      }
    }
    marks[index] = 2;
    return false;
  }

1 个答案:

答案 0 :(得分:1)

似乎应该是else if (visit(i))而不是else if (visit(marks[i]))