【发布时间】:2015-12-09 23:38:42
【问题描述】:
我想使用图中表示的这个迷宫,使用迭代深度优先搜索从起始节点找到通往目标的路径。它是一个文本文件,仅包含一对数字,例如成对连接,即边/弧。像这样:
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 这样的打印路径。我想让它尽可能简单,以便每个人都能理解。有什么建议或意见吗?
【问题讨论】:
-
您不使用 dfs 来查找最短路径。改用 bfs
-
对于那些不知道的人,BFS 代表广度优先搜索
-
我也有广度优先,这对我来说很好。我只是想知道是否有另一种仅使用深度优先搜索的方法。
-
你在寻找最短路径吗?
-
基本上,是的。这不是最适合的吗?广度优先搜索是找到最短路径的最佳方法。
标签: java stack graph-algorithm depth-first-search