1 #include<stdio.h>
2 int main()
3 {
4 int n,m,c,b,i,j;
5 scanf("%d %d %d %d",&n,&m,&c,&b);
6 int a[20][20]= {0},t[20][20]= {0};//t作为标记数组,来标记这点是否可以通过。
7 t[c][b]=1;//现将马所在的点标记为不可通过。
8 int head[8]= {2,1,-1,-2,2,1,-1,-2},end[8]= {1,2,2,1,-1,-2,-2,-1};//表示马行走的坐标。
9 for(i=0; i<8; i++)
10 {
11 if((c+head[i]>=0)&&(c+head[i]<=n)&&(b+end[i]>=0)&&(b+end[i]<=m))//马行走的也要在数据范围内。
12 t[c+head[i]][b+end[i]]=1;//按照象棋行走的规则,将马下一步可走的点全部标记为不可通过。
13 }
14 a[0][0]=1;//这里是从起点开始,且要标记为1.
15 for(j=0; j<=m; j++)
16 {
17 for(i=0; i<=n; i++)
18 {
19 if(t[i][j]==1)
20 {
21 a[i][j]=0;//如果不能通过,则这里的a标记为0;
22 }
23 else if(i!=0&&j!=0)
24 {
25 a[i][j]=a[i-1][j]+a[i][j-1];//讲左边和上边所代表的数加起来,表示达到这点的路径条数。
26 }
27 else if(i==0&&j!=0)//在边缘时,要查看左边和上边是否存在坐标。
28 {
29 a[i][j]=a[i][j-1];
30 }
31 else if(j==0&&i!=0)
32 {
33 a[i][j]=a[i-1][j];
34 }
35 }
36 }
37 printf("%d\n",a[n][m]);
38 return 0;
39 }