我使用DFS算法来记录解决迷宫所需的动作。有一个startVertex
和一个endVertex
。我的代码如下:
private void DFS(int vertex, boolean visited[], LinkedList<Move> output) {
visited[vertex] = true;
for (int neighbor: g.neighbors(vertex)) {
if (visited[neighbor] != true) {
if (neighbor == vertex + 1)
output.add(Move.RIGHT);
else if (neighbor == vertex - 1)
output.add(Move.LEFT);
else if (neighbor == vertex + Math.sqrt(g.size()))
output.add(Move.DOWN);
else
output.add(Move.UP);
if (neighbor == endVertex)
break;
DFS(neighbor, visited, output);
}
else {
output.removeLast();
}
}
}
当我探索所有周围的邻居时,我正在使用removeLast()
函数,因此特定的顶点仍然无用。但我认为这个错误只存在于那里。
图g
的大小为n*n
,因为原始迷宫是具有n行和n列的2D方阵。
答案 0 :(得分:0)
离开DFS时你需要清除被访问者(并且找不到endVertex)
output.removeLast应与output.add
break只离开最里面的循环。这就是你想要的吗?
您可能希望让DFS返回是否找到了endVertex,因此您知道可以在更高层中停止搜索