题解 | #迷宫问题#

#include <bits/stdc++.h>

using namespace std;

int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1};
vector<pair<int, int>> res;

void dfs(vector<vector<int>>& matrix, int m, int n, int x, int y, vector<pair<int, int>>& paths){
    //一定要先压 后判断终止条件
    paths.push_back(make_pair(x, y)); //压入路径
    matrix[x][y] = 1; //标记为 已经访问过
    
    if(x == m - 1 && y == n - 1){
        res = paths;
        return;
    }

    //四个方向
    for(int i = 0; i < 4; i++){
        int mx = x + dx[i]; int my = y + dy[i];
        if(mx >= 0 && mx < m && my >= 0 && my < n && matrix[mx][my] == 0){
            dfs(matrix, m, n, mx, my, paths);
            paths.pop_back(); //回溯          
        }
    }
    matrix[x][y] = 0;
    return;  
}

int main(){
    int m = 0, n = 0;
    while(cin >> m >> n){
        vector<vector<int>> matrix(m, vector<int>(n, 0)); //
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                cin >> matrix[i][j];
            }
        }
        
        vector<pair<int, int>> paths;//记录临时路径
        //dfs
        dfs(matrix, m, n, 0, 0, paths);
        
        for(int i = 0; i < res.size(); i++){
            cout << "(" << res[i].first << "," << res[i].second << ")" << endl;
        }
        
    }
    
    return 0;
}
全部评论

相关推荐

千疮百孔的象牙塔:我也在捣鼓im,你这个im好奇怪的样子,单看简历get不到点,im的消息及时性,消息可靠性,然后系统的可扩展性这几个关键问题都是怎么解决的从简历描述get不到,具体说消息怎么传,消息怎么推送,消息怎么存,消息安全怎么做的这些点感觉对应不起来
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务