第3,4个点超时
#include<bits/stdc++.h>
using namespace std;
int tot,x,y,n,m;
//花花卡的神秘力量
int F[8][2]={{-1,-2},{-2,-1},{-2,1},
{-1,2},{1,2},{2,1},{2,-1},{1,-2}};//马的8种走法
bool f[25][25]={1};
void dfs(int x1,int y1)//深度优先搜索
{
if(x1==n&&y1==m)
{
tot++;
return;
}//到达终点记录并回溯
if(x1+1<=n&&!f[x1+1][y1])//向下走,判断边界和标记
{
f[x1+1][y1]=1;//标记
dfs(x1+1,y1);//继续走
f[x1+1][y1]=0;//回溯取消标记
}
if(y1+1<=m&&!f[x1][y1+1])//向左走
{
f[x1][y1+1]=1;
dfs(x1,y1+1);
f[x1][y1+1]=0;
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
f[x][y]=1;//马的位置也一定要标记
for(int i=0;i<8;i++)
if(x+F[i][0]<=n&&x+F[i][0]>=0&&y+F[i][1]<=m&&y+F[i][1]>=0)//判断边界
f[x+F[i][0]][y+F[i][1]]=1;//标记马的控制点
dfs(0,0);//从起点开始走
printf("%d",tot);
}