题解 | #迷宫问题#

迷宫问题

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

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

bool hasPathImp(int*&maze,int row,int col,int rows,int cols,bool*&visitArr,std::vector<std::pair<int,int>>&ret)
{
    if(row==rows-1&&col==cols-1) //到达迷宫右下角了
    {
        ret.emplace_back(std::make_pair(row,col));
        return true;
    }
    if(row>=0&&row<rows&&col>=0&&col<cols&&!visitArr[row*cols+col]&&maze[row*cols+col]==0)
    {
        visitArr[row*cols+col]=true;
        if(hasPathImp(maze,row-1,col,rows,cols,visitArr,ret)||
        hasPathImp(maze,row+1,col,rows,cols,visitArr,ret)||
        hasPathImp(maze,row,col+1,rows,cols,visitArr,ret)||
        hasPathImp(maze,row,col-1,rows,cols,visitArr,ret))
        {
            ret.emplace_back(std::make_pair(row, col));
            return true;
        }
        else
            visitArr[row*cols+col]=false;
    }
    return false;
}

int main() 
{
    int row,col;
    cin>>row>>col;
    int*maze=new int[row*col];
    bool*visitArr=new bool[row*col]; //是否被访问过标记
    memset(visitArr,0,row*col);
    int temp,index=0;
    while(cin>>temp)
        maze[index++]=temp;
    std::vector<std::pair<int,int>>ret; //保存结果用
    hasPathImp(maze,0,0,row,col,visitArr,ret);
    delete[]maze;
    delete[]visitArr;
    for(auto itor=ret.rbegin();itor!=ret.rend();++itor) //注意需要反向输出
        cout<<"("<<(*itor).first<<","<<(*itor).second<<")"<<"\n";
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务