#include<iostream> using namespace std; long B[21][21];//定义棋盘 int main(){ int n,m;//目标点的坐标 int a,b;//马所在点的坐标 cin>>n>>m>>a>>b; //初始化棋盘:假设到达目标点(n,m)前每个点都可以通行设置成1 for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) B[i][j]=1; //将马控制的点设置成0,代表不能通过 //控制马上边的4个点,只要不超过边届,则为控制点 if(a-2>=0&&b-1>=0) B[a-2][b-1]=0; if(a-2>=0&&b+1<=m) B[a-2][b+1]=0; if(a-1>=0&&b-2>=0) B[a-1][b-2]=0; if(a-1>=0&&b+2<=m) B[a-1][b+2]=0; //马下边的4个点,只要不超过边届,则为控制点 if(a+1<=n&&b-2>=0) B[a+1][b-2]=0; if(a+2<=n&&b-1>=0) B[a+2][b-1]=0; if(a+1<=n&&b+2<=m) B[a+1][b+2]=0; if(a+1<=n&&b+1<=m) B[a+2][b+1]=0; //马所在点不能 B[a][b]=0; for(int i=0;i<=n;i++){ for(int j=0;j<=m;j++){ //如果可行 if(B[i][j]){ if(i==0&&j==0) continue; else if(i==0) B[i][j]=B[i][j-1]; //目标点在最上面一行的时候 else if(j==0) B[i][j]=B[i-1][j];//目标点在最左边一行 else B[i][j]=B[i-1][j]+B[i][j-1];//到达目标点路径=上点路径+左点路径 } } } cout<<B[n][m]<<endl; } /************************************************************** Problem: 1224 User: admin Language: C++ Result: Accepted Time:11 ms Memory:2076 kb ****************************************************************/