递推方法
#include<iostream>
#include<cstdio>
using namespace std;
int n,l[20],r[20],u[20];
int main(){
cin>>n;
if(n==1) cout<<3;
else{
l[1]=r[1]=u[1]=1;
for(int i=2;i<=n;i++){
l[i]=l[i-1]+u[i-1];
r[i]=r[i-1]+u[i-1];
u[i]=l[i-1]+r[i-1]+u[i-1];
}
int ans=l[n]+r[n]+u[n];
cout<<ans<<endl;
}
return 0;
}
深度搜索
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int visited[20][50]={0};
int dfs(int i,int j,int n){
if(n==0) return 1;
visited[i][j]=1;
int num=0;
if(!visited[i+1][j]) num+=dfs(i+1,j,n-1);
if(!visited[i][j+1]) num+=dfs(i,j+1,n-1);
if(!visited[i][j-1]) num+=dfs(i,j-1,n-1);
visited[i][j]=0;
return num;
}
int main(){
int n;
cin>>n;
cout<<dfs(0,25,n)<<endl;
return 0;
}