2012-03-22 7 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

私はおそらくので、私はそれをバックトラックすることができ、スタックで実行しているDFSを持っている必要があります。しかし、今のように、グラフでDFS検索を実行できます。 –