这题目难度标中等??

递归还是有难度啊。。。

#include #include #include using namespace std; struct point{ int x; int y; }; int N,M; void dfs(vector<vector>&maze,vector&path,vector&res,point& p) { if((p.x==M-1)&&(p.y==N-1)) { res=path; return; } //向上

if(((p.y-1)<N)&&((p.y-1)>=0)&&maze[p.y-1][p.x]==0)
{if(path.size()>1)
    {if(p.y-1!=path[path.end()-path.begin()-2].y)
{   point temp = {p.x,p.y-1}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
 path.pop_back();
}
    }
else

{ point temp = {p.x,p.y-1}; path.push_back(temp); dfs(maze,path,res,temp); path.pop_back(); }} //向下

if(((p.y+1)<N)&&(p.y+1)>=0&&maze[p.y+1][p.x]==0)
     if(path.size()>1){
        if(p.y+1!=path[path.end()-path.begin()-2].y)
{   point temp = {p.x,p.y+1}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
     path.pop_back();
}}
else
{
     point temp = {p.x,p.y+1}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
     path.pop_back();
}
    if(((p.x+1)<M)&&(p.x+1)>=0&&maze[p.y][p.x+1]==0)
    if(path.size()>1)
    {if(p.x+1!=path[path.end()-path.begin()-2].x)
{   point temp = {p.x+1,p.y}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
 path.pop_back();
}}
else
     {   point temp = {p.x+1,p.y}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
 path.pop_back();
}
        if(((p.x-1)<M)&&(p.x-1)>=0&&maze[p.y][p.x-1]==0)
    if(path.size()>1)
    {if(p.x-1!=path[path.end()-path.begin()-2].x)
{   point temp = {p.x-1,p.y}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
 path.pop_back();
}
    }
else
{ point temp = {p.x-1,p.y}; 
    path.push_back(temp);
    dfs(maze,path,res,temp);
 path.pop_back();}
return;

} int main() {

while(cin>>N>>M){
vector<vector<int>>maze(N,vector<int>(M,0));
for(int i=0;i<N;i++)
    for(int j=0;j<M;j++)
    {
        cin>>maze[i][j];
    }
vector<point> path;
path.push_back({0,0});
vector<point>res;
point p ={0,0};
dfs(maze,path,res,p);
for(int i=0 ;i<res.size();i++){
    p=res[i];
cout<<'('<<p.y<<','<<p.x<<')'<<endl;
}

}
return 0;

}