2013-04-24 1 views
0

이 시점에서 무한 루프의 소스를 확인하려고 조금 미쳤습니다 (stackoverflow 오류 발생). 그래프에서 사이클을 감지하기 위해 수정 된 DFS를 구현하려고합니다. 이 예제에서는 11 페이지에서 작업하고 있습니다. http://www.cs.berkeley.edu/~kamil/teaching/sp03/041403.pdf무한 루프에서 스택 오버플로 - 수정 된 DFS의 사이클을 감지

이 구현에서는 0 = 흰색, 1 = 회색 및 2 = 검정입니다. 나는 비교적 간단한 것을 놓치기를 바라고 있습니다.

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; 
    } 
+0

무엇 n''의 값이 어디 그것에서 오는 else if (visit(marks[i]))else if (visit(i))해야 같은데? – glenatron

+0

'n = 그래프의 정점 수' – AbstractChaos

+0

n의 값은 그래프의 정점 수입니다. 이것은 테스트하고 알고있는 올바른 함수를 반환하는 다른 함수에 의해 결정됩니다. – user2316407

답변

1

는 대신

+0

충분히 고마워 할 수 없어! 많이 감사합니다. – user2316407