题解 | #迷宫问题#

迷宫问题

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

//https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc?tpId=37&tqId=21266&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

#include <iostream>
#include <vector>

using namespace std;

void dfs(int x, int y, vector<pair<int, int>> &st, vector<vector<int>> &num, vector<pair<int, int>> &ans){  //可以设置为全局变量减少def参数
    int n = num.size();
    int m = num[0].size();

    if(x<0||x>(n-1)||y<0||y>(m-1)||num[x][y]==1)
        return;
    else if(x==(n-1)&&y==(m-1)){
        st.push_back(pair<int, int>(x, y));
        ans = st;
        return;
        }else{
            st.push_back(pair<int, int>(x, y)); //可替换为emplace_back()
            num[x][y]=1;
            dfs(x, y+1, st, num, ans);
            dfs(x+1, y, st, num, ans);
            dfs(x, y-1, st, num, ans);
            dfs(x-1, y, st, num, ans);
            st.pop_back();
            num[x][y]=0;
        }
}

int main() {
    int n = 0;
    int m = 0;

    while (cin >> n >> m) {
        vector<vector<int>> num(n, vector<int>(m, 0));
        vector<pair<int, int>> st;
        vector<pair<int, int>> ans;

        for(int i = 0;i<n;i++)
            for(int j = 0;j<m;j++)
                cin >> num[i][j];

        dfs(0, 0, st, num, ans);

        for(auto point:ans)
            cout << '(' << point.first << ',' << point.second << ')' << endl;
//        for(auto [x,y]:ans)
//            cout << '(' << x << ',' << y << ')' << endl;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务