马走日
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4
5 int a[10][10],r[16],n,m,cnt;
6
7 void dfs(int x,int y,int d){
8 if(d==n*m){
9 cnt++;
10 return;
11 }
12 a[x][y]=1;
13 for(int i=0;i<8;i++){
14 int nx=x+r[i],ny=y+r[i+8];
15 if(nx>=0&&nx<n&&ny>=0&&ny<m&&!a[nx][ny]){
16 dfs(nx,ny,d+1);
17 a[nx][ny]=0;
18 }
19 }
20 }
21 int main(){
22 r[0]=r[7]=2,r[1]=r[6]=1,r[2]=r[5]=-1,r[3]=r[4]=-2;
23 r[8]=r[11]=-1,r[9]=r[10]=-2,r[12]=r[15]=1,r[13]=r[14]=2;
24 int k,x,y;
25 cin>>k;
26 while(k--){
27 cin>>n>>m>>x>>y;
28 cnt=0;
29 memset(a,0,sizeof(a));
30 dfs(x,y,1);
31 cout<<cnt<<endl;
32 }
33 return 0;
34 }