题解 | #迷宫问题#

迷宫问题

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

#include <iostream>
#include <vector>
using namespace std;

class Solution{

public:
    void mazePath(vector<vector<int>> &path){
        int n = path.size();
        for (int i = 0; i < n; i++){
            cout << '(' << path[i][0] << ',' << path[i][1] << ')' << endl;
        }
    }
    void dfs(vector<vector<int>> &maze, int x, int y, vector<vector<int>> &path){
        if ((x == maze.size() - 1) && (y == maze[0].size() - 1)) {
            path.push_back({x,y});
            mazePath(path);
            return; //一旦找到就应该全部退出了,但似乎刹不住车了
        }

        if (x < maze.size() && y < maze[0].size() && x >= 0 && y >= 0){
            vector<int> pos = {x,y};
            // if (!path.empty()){
            //     if (x == path.back()[0] && y == path.back()[1]) return;
            // }
            path.push_back(pos);

            if (maze[x][y] == 0)  {
                maze[x][y] = 1; // 避免死循环
                dfs(maze, x+1, y, path);
                dfs(maze, x, y+1, path);
                dfs(maze, x-1, y, path);
                dfs(maze, x, y-1, path);

                
            }
            path.pop_back();
        }
    }

};

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> data(n, vector<int> (m));
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin >> data[i][j];
        }
    }

    Solution res;
    vector<vector<int>> path;
    res.dfs(data,0,0,path);
    
    return 0;
}

关键一步在于堵门,避免往上走之后又往下走然后又往上走死循环

DFS语句的顺序很重要,要把情况考虑充分,代入检验

全部评论

相关推荐

写不来代码的小黑:这么小的城市能有做it的公司也不容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务