这道题让我感到了快乐
#include<cstdio>
#include<cstring>
const int N=11;
int vis[N][N],n,m,x0,y0,nm,ans=0;
int fx[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
void dfs(int x,int y,int step)
{
if(step==nm)
ans++;
else
for(int i=0;i<8;i++)
{
int tempx=x+fx[i][0],tempy=y+fx[i][1];
if(tempx>=0&&tempx<n&&tempy>=0&&tempy<m&&!vis[tempx][tempy])
{
vis[tempx][tempy]=1;
dfs(tempx,tempy,step+1);
vis[tempx][tempy]=0;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
scanf("%d%d%d%d",&n,&m,&x0,&y0);
nm=n*m;ans=0;
vis[x0][y0]=1;
dfs(x0,y0,1);
printf("%d\n",ans);
}
return 0;
}