题解 | #迷宫问题#

迷宫问题

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

比较经典的回溯问题

主程序调用回溯算法,为了避免回溯函数中参数过多,可以将部分参数设置为全局

以下是我的解答

#include <vector>

using namespace std;

bool findPath(int i, int j, vector<vector<int>>& path, vector<vector<int>>& vin, vector<vector<bool>>& isvisited);
vector<vector<int>> dirs = {{0,1}, {0,-1}, {1,0}, {-1,0}};


int main(){
    int n, m;
    cin >> n >> m;
    vector<vector<int>> vin(n, vector<int>(m, 0));
    while(cin){
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                cin >> vin[i][j];
            }
        }
    }
    auto printij = [&](int i, int j){
        cout << '(' << i << ',' << j << ')' << endl;
    };
    vector<vector<int>> path;
    path.push_back({0,0});
    vector<vector<bool>> isvisited(n, vector<bool>(m, false));
    
    findPath(0, 0, path, vin, isvisited);
    for(auto& x : path){
        printij(x[0], x[1]);
    }
    

    return 0;
}

bool findPath(int i, int j, vector<vector<int>>& path, vector<vector<int>>& vin, vector<vector<bool>>& isvisited){
    if(i==vin.size()-1 && j==vin[0].size()-1){
        return true;
    }
    // path.push_back({i,j});
    for(auto& x : dirs){
        int nexti = i + x[0];
        int nextj = j + x[1];
        if(nexti>=0 && nexti<vin.size() && nextj>=0 && nextj<vin[0].size() && !isvisited[nexti][nextj]){
            if(vin[nexti][nextj]==0){
                path.push_back({nexti,nextj});
                isvisited[nexti][nextj] = true;
                if(findPath(nexti, nextj, path, vin, isvisited)){
                    return true;
                }
                path.pop_back();
                isvisited[nexti][nextj] = false;
            }
        }
    }
    return false;
    
}

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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