题解 | #迷宫问题#

迷宫问题

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")

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务