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 }