说实话那个递推我真的想不到。但是他数字真的小,完全可以暴力搜索。直接dfs。
#include<stdio.h>
int a[21][41]={0},count=0,d[3][2]={-1,0,0,-1,0,1};
void dfs(int i,int j,int c){
if(c==0){
count++;
}
else{
for(int k=0;k<3;k++)
if(!a[i+d[k][0]][j+d[k][1]]){
a[i+d[k][0]][j+d[k][1]]=1;
dfs(i+d[k][0],j+d[k][1],c-1);
a[i+d[k][0]][j+d[k][1]]=0;
}
}
}
int main()
{
int n;
scanf("%d",&n);
a[20][20]=1;
dfs(20,20,n);
printf("%d",count);
}
注意用了回溯法。因为不能回头。