#include<bits/stdc++.h>
//#include<windows.h>
using namespace std;
int main(){
int x1,y1,x2,y2;
cin>>x2>>y2>>x1>>y1;
int av[2][9] = {{x1,x1+2,x1+1,x1-1,x1-2,x1-2,x1-1,x1+1,x1+2},{y1,y1+1,y1+2,y1+2,y1+1,y1-1,y1-2,y1-2,y1-1}};
int map[x2+1][y2+1]={0};
for(int i=0;i<=y2;i++){
map[0][i]=0;
}
map[0][0]=1;
for(int i=0;i<=x2+y2;i++){
for(int j=0;j<=x2;j++){
int x=j;
int y=i-j;
if((x!=0||y!=0)&&(x>=0&&y>=0)&&(x<=x2&&y<=y2)){
if(x>0) map[x][y]+=map[x-1][y];
if(y>0) map[x][y]+=map[x][y-1];
for(int a=0;a<9;a++){
if(x==av[0][a]&&y==av[1][a]) map[x][y]=0;
}
}
/*
cout<<y<<" "<<x<<endl;
for(int a=0;a<=x2;a++){
for(int b=0;b<=y2;b++){
cout<<map[a][b]<<" ";
}
cout<<endl;
}
system("pause");
*/
}
}
cout<<map[x2][y2];
return 0;
}
map[0][0]=1(从0,0走到0,0有一种方法)
map[x][y]=map[x-1][y]+map[x][y-1](从0,0走到 x,y有x-1,y的走法 + x,y-1的走法 种走法)
如果map[x][y]为马的控制点或马则将map[x][y]设为0
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
|---|---|---|---|---|---|---|
| 1 | 2 | 马 | 1 | 马 | 1 | 2 |
| 1 | 马 | 0 | 1 | 1 | 马 | 2 |
| 1 | 1 | 1 | 马 | 1 | 1 | 3 |
| 1 | 马 | 1 | 1 | 2 | 马 | 3 |
| 1 | 1 | 马 | 1 | 马 | 0 | 3 |
| 1 | 2 | 2 | 3 | 3 | 3 | 6 |
不知道为什么会wa