2012-03-22 1 views
1

그래프의 모든 오일러 경로를 찾는 알고리즘을 구현 중입니다. 나는 코드에서 DFS를 만들기 위해, 자신을 내놓고있어 여기 : Find all possible Euler cycles 여기오일러 경로 DFS 구현

내 현재 코드 :

public class Graph { 

private int numVertex; 
private int numEdges; 
private boolean[][] adj; 

public Graph(int numVertex, int numEdges) { 
    this.numVertex = numVertex; 
    this.numEdges = numEdges; 
    this.adj = new boolean[numVertex+1][numVertex+1]; 
} 

public void addEdge(int start, int end){ 
    adj[start][end] = true; 
    adj[end][start] = true; 
} 

public Integer DFS(Graph G, int startVertex){ 
    int i=0; 
    pilha.push(startVertex); 
    for(i=0; i<G.numVertex; i++){ 

     if(G.adj[i][startVertex] != false){ 
      System.out.println("i: " + i); 
      G.adj[i][startVertex] = false; 
      G.adj[startVertex][i] = false; 

      DFS(G, i); 

      G.adj[i][startVertex] = true; 
      G.adj[startVertex][i] = true; 
     } 

    } 
    return -1; 
} 

Stack<Integer> pilha = new Stack(); 

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    int numVertices = input.nextInt(); 
    int numLinks = input.nextInt(); 
    int startNode = input.nextInt(); 

    Graph g = new Graph(numVertices, numLinks); 

    for(int i = 0; i<numLinks; i++){ 
     g.addEdge(input.nextInt(),input.nextInt()); 
    } 

} 

}

불행하게도 내가 올바른 결과를 얻을하지 않으며, 나는 이유를 알 수없는 것 같습니다. dfs의 결과를 목록에 저장하고 인쇄하는 작업을 많이 시도했지만 여전히 경로가 없습니다.

내 코드를 수정하여 어떻게 오일러 경로를 시작하는지에 대한 아이디어가 있습니까?

답변

0

프로그램의 결과가 어떠할 것으로 기대하십니까? 노드를 임시 스택 (pilha)으로 푸시합니다. 노드를 방문해야하는 순서를 실제로 결정하기 때문에 스택을 유지해야합니다. 또한 DFS 메서드는 void이지만 어떻게 든 호출 결과를 res에 추가합니다. 이 코드가 성공적으로 실행됩니까?

+0

죄송합니다. 코드를 추가 할 때 코드가 약간 어둡습니다. 나는 그것을 조금 깨끗이하려고 노력할 것이다. –

+1

아직 명확하지 않습니다. 새로운 변경으로 인해 DFS가 정수를 반환 할 이유가 없습니다. 또한 필 하를 어떻게 든 사용하십시오. –

+0

아마도 backtrack 할 수 있도록 스택과 함께 dfs를 실행해야 할 것입니다. 그러나 지금 당장은 그래프로 DFS 검색을 수행 할 수 있습니다. –