Euler路径DFS实现

时间:2012-03-22 09:58:08

标签: java algorithm depth-first-search

我正在实现一种算法来查找图中的所有euler路径。我在自己的基础上,在这里找到的代码中创建dfs:Find all possible Euler cycles

这是我目前的代码:

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中的结果存储在列表中并打印出来,但我仍然没有路径。

关于如何修改我的代码以便开始获取euler路径的任何想法?

1 个答案:

答案 0 :(得分:0)

您对计划的结果有何期待?您正在将节点推送到临时堆栈(pilha)。您需要保留该堆栈,因为它实际上将确定您应该访问节点的顺序。此外,DFS方法是无效的,但不知何故,您可以在列表res中添加其调用的结果。这段代码甚至成功运行了吗?