样例结果是对的,但是只有2过了,1、5WA,3、4TLE
#include<cstdio>
int h[9][2]={{0,0},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
int walk[2][2]={{1,0},{0,1}};
int n,m,a,b,ans;
void f(int x,int y);
bool check(int x,int y);
int main(){
scanf("%d %d %d %d",&n,&m,&a,&b);//B(n,m) 马(a,b)
ans=0;
for (int i=0;i<9;i++) {
h[i][0]+=a,h[i][1]+=b;
}
f(0,0);
printf("%d",ans);
return 0;
}
void f(int x,int y){
if (x==n&&y==m){
ans++;
return;
}
for (int i=0;i<2;i++){
int p=x+walk[i][0],q=y+walk[i][1];
if (p<=m&&p>=0&&q<=n&&q>=0&&check(p,q)){
f(p,q);
}
}
return;
}
bool check(int x,int y){
for (int i=0;i<9;i++){
if (x==h[i][0]&&y==h[i][1]){
return false;
}
}
return true;
}