Jackkk_2022 2023-12-02 12:33 采纳率: 33.3%
浏览 6

c++ 递归 迷宫全路径问题

题目是探索迷宫的所有路径。
疑问:为什么第一个图的判定就是对的,第二个图的就不对,少了4组解呢?

img

img

  • 写回答

2条回答 默认 最新

  • DTcode7 前端领域优质创作者 2024-05-28 01:29
    关注

    答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

    在C++中,我们可以使用深度优先搜索(DFS)算法来解决迷宫全路径问题。这个问题可以看作是在一个二维网格中,从起点到终点的所有可能路径的搜索问题。

    首先,我们需要定义一个二维数组来表示迷宫,其中0表示可以通过的路径,1表示墙壁或者障碍物。然后,我们需要定义一个同样大小的二维数组来记录我们的路径。

    接下来,我们从起点开始,每次尝试向上、下、左、右四个方向移动,如果某个方向是可行的(即没有越界,且该位置是0),我们就向该方向移动一步,并标记该位置为已访问(例如将其值设为2)。然后,我们递归地对新的位置进行同样的操作。如果新的位置是终点,那么我们就找到了一条路径。如果新的位置不能继续前进,那么我们就回溯到上一个位置,尝试其他的方向。

    以下是一个简单的C++代码示例:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    void dfs(vector<vector<int>>& maze, vector<vector<int>>& path, int x, int y) {
        int rows = maze.size();
        int cols = maze[0].size();
        if (x < 0 || x >= rows || y < 0 || y >= cols || maze[x][y] != 0) {
            return;
        }
        if (path[x][y] == 1) {
            return;
        }
        path[x][y] = 1;
        if (x == rows - 1 && y == cols - 1) {
            for (int i = 0; i < rows; ++i) {
                for (int j = 0; j < cols; ++j) {
                    cout << path[i][j] << " ";
                }
                cout << endl;
            }
            cout << endl;
        } else {
            dfs(maze, path, x - 1, y);
            dfs(maze, path, x + 1, y);
            dfs(maze, path, x, y - 1);
            dfs(maze, path, x, y + 1);
        }
        path[x][y] = 0;
    }
    
    int main() {
        vector<vector<int>> maze = {{0, 0, 0}, {0, 1, 0}, {0, 0, 0}};
        vector<vector<int>> path(maze.size(), vector<int>(maze[0].size(), 0));
        dfs(maze, path, 0, 0);
        return 0;
    }
    

    在这个代码中,dfs函数是我们的深度优先搜索函数,它接受迷宫、路径和当前位置作为参数。我们首先检查当前位置是否越界或者是否是墙壁,如果是,则直接返回。然后,我们检查当前位置是否已经访问过,如果是,则直接返回。接着,我们将当前位置标记为已访问,然后尝试向四个方向移动。如果新的位置是终点,我们就打印出当前的路径。否则,我们递归地对新的位置进行同样的操作。最后,我们将当前位置标记为未访问,以便于后续的搜索。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月2日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373