这题目是一道深搜的题目,我们写一个递归函数叫Ways(int i, int j ,int n),i j就是当前所处的坐标,我们设置一个visited数组,简称 V 。
对于这个数组,首先初始化为零,然后我们递归的边界条件就是走完输入的步数的时候,就返回一。
如果没走完,就对当前的visited数组,当前的位置标记为一,说明已经走过,我们继续向下递归的时候,就不能再走这一块了。
也就相当于是,我们站在某一点,后面的三条路走完之后,我们便回到当前点,把这点标记清空,表示这点可以走了,因为其他的递归可能会走到这一点。
这就是这道递归的思路。
#include <iostream>
#include <cstring>
using namespace std;
int V[50][50];
int Ways(int i,int j,int n)
{
if (n==0)
return 1;
V[i][j]=1;
int num=0;
if (!V[i+1][j])
num+=Ways(i+1,j,n-1);
if (!V[i][j+1])
num+=Ways(i,j+1,n-1);
if (!V[i][j-1])
num+=Ways(i,j-1,n-1);
V[i][j]=0;
return num;
}
int main()
{
int N;
cin>>N;
memset(V,0,sizeof(V));
cout<<Ways(0,25,N)<<endl;
return 0;
}