gpt4 book ai didi

java - 迭代 DFS 与递归 DFS 中的奇数排序

转载 作者:行者123 更新时间:2023-11-30 07:30:46 26 4
gpt4 key购买 nike

我正在解决这个 dfs/bfs问题。

我编写了 DFS 的迭代版本和递归版本。

节点访问的顺序不同,我不明白为什么。

迭代 DFS:

static void DFS (Integer root, Graph graph){

// System.out.println("DFS");

HashSet <Integer> explored = new HashSet<Integer>();
explored.add(root);

Stack<Integer> stack = new Stack<Integer>();
stack.add(root);

int v; int w;


while (!stack.isEmpty()){

v=stack.pop();
explored.add(v);

System.out.print(v + " ");
// for (int i=graph.adjacencies.get(v).size()-1; i>=0; i--) {
for (int i=0; i < graph.adjacencies.get(v).size(); i++) {
w = graph.adjacencies.get(v).get(i);

if (!explored.contains(w)){

stack.add(w);
explored.add(w);
}
}

}System.out.println();
}

递归 DFS:

static void DFS_2 (Integer root, Graph graph){

// System.out.println("DFS_2");

int v; int w;

v = root;

graph.explored.add(v);

System.out.print(v + " ");
for (int i=0; i < graph.adjacencies.get(v).size(); i++) {

w = graph.adjacencies.get(v).get(i);

if (!graph.explored.contains(w)){

graph.explored.add(w);
DFS_2(w, graph);
}
}


}

在教程问题上,我在迭代 DFS 版本上的输出是

1 4 3 2 6

虽然它应该是(根据问题示例输出和递归版本):

1 3 2 6 4

这里发生了什么?为什么消除递归会改变访问节点的顺序?

-> Full code on a Netbeans project .

最佳答案

检查您的 graph.adjacencies.get(V),它们对这两种情况的响应是否相同?如果是这样,那么递归调用和堆栈调用将给出不同的结果。例如,一棵树:

      1
2 3
4

堆栈版本的顺序为1->3->2->41->2->4->3的顺序对于递归版本,假设 graph.adjacencies.get(V) 总是首先返回左 child 。

关于java - 迭代 DFS 与递归 DFS 中的奇数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com