原题链接
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int t;
int n,m,a,b;
const int maxn =15;
int dx[8]={1,1,-1,-1,2,2,-2,-2};
int dy[8]={2,-2,-2,2,1,-1,1,-1};
int k,cnt;
int vis[maxn][maxn];
void dfs(int x,int y,int cnt){
cnt++;
vis[x][y]=1;
if(cnt==m*n) {
k++;
return ;
}
for(int i=0;i<=7;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(tx<1||tx>n||ty<1||ty>m) continue;
if(vis[tx][ty]==1) continue;
dfs(tx,ty,cnt);
vis[tx][ty]=0;
}
}
int main(){
cin>>t;
while(t--){
memset(vis,0,sizeof(vis));
cnt=0;
k=0;
cin>>n>>m>>a>>b;
dfs(a+1,b+1,0);
cout<<k<<endl;
}
return 0;
}