我的迷宫解决算法有什么问题?

时间:2017-11-16 16:48:28

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

我使用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方阵。

1 个答案:

答案 0 :(得分:0)

  • 离开DFS时你需要清除被访问者(并且找不到endVertex)

  • output.removeLast应与output.add

  • 对称
  • break只离开最里面的循环。这就是你想要的吗?

  • 您可能希望让DFS返回是否找到了endVertex,因此您知道可以在更高层中停止搜索