深度优先搜索随机选择节点/顶点

时间:2015-12-09 23:38:43

标签: java stack graph-algorithm depth-first-search

我想使用图中表示的迷宫,使用迭代深度优先搜索从起始节点找到目标路径。它是一个文本文件,只包含一对数字,如成对连接a.k.a edges / arcs。像这样:

11 3
2 3
0 3
1 4
5 4
5 7
6 7
7 8
8 9
9 10
0 5

然后我的代码是这样的:

private void performIterativeDFS(MazeGraph G, int node, int goal) {
        ArrayBasedStack arrayStack = new ArrayBasedStack();
        ArrayBasedStack pathStack = new ArrayBasedStack();
        arrayStack.push(node);
        visited[node] = true;
        while (!arrayStack.isEmpty()) {
            int newNode = arrayStack.pop();
            if (newNode == 0) {
                out.print("Starting at " + newNode + " ");
            }
            pathStack.push(newNode);
            if (newNode == goal) {
                out.println("Path if goal found: " + pathStack.toString());
            }
            for (int arc : G.getAdjacencyList(newNode)) {
                if (!visited[arc]) {
                    visited[arc] = true;
                    arrayStack.push(arc);
                }
            }
        }
    }

我输入0作为起始节点,目标节点是1.然后输出的路径是0,5,7,8,9,10,6,4,1。不幸的是,这不是一个适当的解决方案,你可以改为0,5,4,1。迭代深度优先搜索是否会在到达目标之前随机选择下一个节点?

我尝试修改我的代码来做到这一点,但我不能像0,5,4,1一样打印出来。我希望尽可能保持简单,以便每个人都能理解。有什么建议或意见吗?

1 个答案:

答案 0 :(得分:0)

如果你没有改变你的算法(这不会使它成为dfs),你将不会从你的搜索得到不同的答案或(如果你试图除了这个特定的数据之外的任何东西,这将是浪费时间的地图组)。在代码找到减少遍历的节点数的路径之后,您可以尝试实现一种回溯,但这不是您正在寻找的简单答案。

简短回答:不,这不是DFS的工作原理。

编辑:错过了一些你的问题,你的代码中没有任何东西让它随机。如果,而不是

for (int arc : G.getAdjacencyList(newNode)) {
            if (!visited[arc]) {
                visited[arc] = true;
                arrayStack.push(arc);
            }

你随机抽样G,然后你就有机会获得不同的结果,但因为它没有随机元素。