题解 | #迷宫问题#

迷宫问题

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

回溯法:
要注意的是backTrace的返回值bool,只是为了当出发完成条件后一层一层跳出递归用的
include<bits/stdc++.h>
using namespace std;

bool backTrace(vector<vector<int>>& mat,vector<pair<int,int>>& path,int x,int y){
    vector<int> dir{-1,0,1,0,-1};
    int m = mat.size(),n=mat[0].size();
    if(x == m-1&&y==n-1){
        path.push_back({x,y});
        return true;
    }
    mat[x][y] = 1;
    path.push_back(make_pair(x, y));
    for(int i=0;i<4;++i){
        int r = x +dir[i];
        int c = y +dir[i+1];
        if(r>=0&&r<m&&c>=0&&c<n&&!mat[r][c]){
            if(backTrace(mat,path,r,c)) return true;
        }
    }
    mat[x][y] = 0;
    path.pop_back();
    return false;
}

int main(){
    int m,n;
    cin >> m >> n;
    vector<vector<int>> mat(m,vector<int>(n,0));
    vector<pair<int,int>> path;
    for(int i=0;i<m;++i)
        for(int j=0;j<n;++j){
            cin>>mat[i][j];
        }
    
    backTrace(mat,path,0,0);
    for(auto [x,y] : path){
        cout << "("<<x<<","<<y<<")"<<endl;
    }
    
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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