深度搜索
#include <iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
int cnt;
int a[40];
int dx[2]={1,-1};
void dfs(int index,int step){
if(step<0){
return;
}
int t=min(index-1,n-index);
for(int i=0;i<=1;i++){
int temp=index+dx[i];
if(temp==0){
temp=n;
}else if(temp==n+1){
temp=1;
}
if(temp==1&&step==0){
cnt++;
}
dfs(temp,step-1);
}
}
int main(){
cin>>n>>m;
dfs(1,m-1);
cout<<cnt;
return 0;
}
+记忆化搜索:
#include <iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
int cnt;
int a[40];
int dx[2]={1,-1};
int memory[40][40];
int dfs(int index,int step){
if(index==0){
index=n;
}else if(index==n+1){
index=1;
}
if(step==m)return index==1?1:0;
if(memory[index][step])return memory[index][step];
return memory[index][step]=dfs(index+1,step+1)+dfs(index-1,step+1);
}
int main(){
cin>>n>>m;
cout<<dfs(1,0);
return 0;
}