题解 | #迷宫问题#

迷宫问题

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

简洁的递归代码

#include<vector>
using namespace std;

bool Dfs(vector<vector<int>> & arrays,int n,int m,vector<vector<int>> &  Result)
{
    if(n == arrays.size()-1 && m == arrays[0].size()-1)
    {
         Result.push_back({n,m});
         return true;
    }
       
    else
    {
        Result.push_back({n,m});
        arrays[n][m] = 2;
        bool left =false;
        bool right= false;
        bool up = false;
        bool down = false;
        //朝上边
        if(n-1>-1&&arrays[n-1][m] == 0)
            up = Dfs(arrays, n-1, m,Result);
        //朝下边
        if(n+1<arrays.size()&&arrays[n+1][m] == 0)
            down = Dfs(arrays, n+1, m,Result);
        //朝右边
        if(m+1<arrays[0].size()&&arrays[n][m+1] == 0)
            right= Dfs(arrays, n, m+1,Result);
        //朝左边
        if(m-1>-1&&arrays[n][m-1] == 0)
            left = Dfs(arrays, n, m-1,Result);
        if( !(up|down|right|left))
        {
            arrays[n][m] = 0;
            Result.pop_back();
            return false;
        }
        else
            return true;
       
    }
}

int main()
{
    int n ;
    int m;
    cin >>n>>m;
    vector<vector<int>> Arrays(n,vector<int>(m,0));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            int k;
            cin >>k;
            Arrays[i][j] =k; 
        }
    }
    vector<vector<int>> Result;
    Dfs(Arrays,0,0,Result);
    for(int i=0;i<Result.size();i++)
        cout<<"("<<Result[i][0]<<","<<Result[i][1]<<")"<<endl;
}
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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