【问题标题】:What is wrong with my maze-solving algorithm?我的迷宫解决算法有什么问题?
【发布时间】:2017-11-16 16:48:27
【问题描述】:

我使用了 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 列的二维方阵。

【问题讨论】:

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


【解决方案1】:
  • 离开DFS时需要清除visited(并且endVertex还没有找到)

  • output.removeLast 应该与 output.add 对称

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

  • 你可能想让 DFS 返回是否找到 endVertex,这样你就知道可以在更高层停止搜索

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多