题解 | #迷宫问题#

迷宫问题

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

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

int row, col;
vector<vector<int>> maze;
vector<vector<int>> path_tmp;
vector<vector<int>> path_best;

void mazeTrack(int i, int j) {
    maze[i][j] = 1; //代表点(i,j)已经走过
    path_tmp.push_back({i, j});
    //判断是否到达出口
    if (i == row - 1 && j == col - 1) {
	    //寻找最短路径
        if (path_best.empty() || path_best.size() > path_tmp.size())
            path_best = path_tmp;
    }
    //向右走
    if (j + 1 < col && maze[i][j + 1] == 0)
        mazeTrack(i, j + 1);
    //向左走
    if (j - 1 >= 0 && maze[i][j - 1] == 0)
        mazeTrack(i, j - 1);
    //向上走
    if (i - 1 >= 0 && maze[i - 1][j] == 0)
        mazeTrack(i - 1, j);
    //向下走
    if (i + 1 < row && maze[i + 1][j] == 0)
        mazeTrack(i + 1, j);
    maze[i][j] = 0;      //回溯;恢复路径
    path_tmp.pop_back();
}

int main() {
    while (cin >> row >> col) {
        maze = vector<vector<int>> (row, vector<int>(col, 0));
        path_tmp.clear();
        path_best.clear();
        for (int i = 0; i < row; ++i)
            for (int j = 0; j < col; ++j)
                cin >> maze[i][j];
        mazeTrack(0, 0);
	  //输出路径
        for(int i=0;i<path_best.size();++i)
        {
            cout<<"("<<path_best[i][0]<<","<<path_best[i][1]<<")"<<endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
Lorn的意义:你这标个前端是想找全栈吗?而且项目确实没什么含金量,技术栈太少了,边沉淀边找吧 现在学院本想就业好一点四年至少得高三模式两年加油吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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