```cpp
#include<bits/stdc++.h>
using namespace std;
long long int a[25][25]={0};
int f[25][25]={0};
int b[8][2]={{-1,-2},{-1,2},{-2,-1},{2,-1},{-2,1},{1,-2},{2,1},{1,2}};
int main()
{
//
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=0;i<8;i++)
{
int xx=x+b[i][0];
int yy=y+b[i][1];
if(xx<0||xx>n||yy<0||yy>m)
continue;
f[xx][yy]=1;
}
f[x][y]=1;
a[0][0]=1;
for(int i=1;i<=n;i++)
{
if(f[i][0]==0)
{
a[i][0]=a[i-1][0];
}
}
for(int i=1;i<=m;i++)
{
if(f[0][i]==0)
{
a[0][i]=a[0][i-1];
}
}
for(int i=1;i<=n;i++)
{
for(int h=1;h<=m;h++)
{
if(f[i][h]==0)
a[i][h]=a[i-1][h]+a[i][h-1];
else
a[i][h]=0;
}
}
cout<<a[n][m];
//
}
```
by jinitaimai33333 @ 2023-06-19 21:14:57
```
#include<bits/stdc++.h>
using namespace std;
long long n,m,xm,ym,a[1001][1001],ans,f[1001][1001],vis[1001][1001];
int dfs(int x,int y) {
if(vis[x][y]){
return f[x][y];
}
if(a[x][y]) {
return 0;
}
if(x>n||y>m) {
return 0;
}
if(x==n&&y==m) {
return 1;
}
f[x][y]=dfs(x+1,y)+dfs(x,y+1);
vis[x][y]=1;
return f[x][y];
}
int main() {
cin>>n>>m>>xm>>ym;
if(xm>=0&&ym>=0&&xm<=n&&ym<=n) {
a[xm][ym]=1;
}
if(xm+1>=0&&ym+2>=0&&xm+1<=n&&ym+2<=n) {
a[xm+1][ym+2]=1;
}
if(xm+2>=0&&ym+1>=0&&xm+2<=n&&ym+1<=n) {
a[xm+2][ym+1]=1;
}
if(xm-1>=0&&ym+2>=0&&xm-1<=n&&ym+2<=n) {
a[xm-1][ym+2]=1;
}
if(xm+2>=0&&ym-1>=0&&xm+2<=n&&ym-1<=n) {
a[xm+2][ym-1]=1;
}
if(xm+1>=0&&ym-2>=0&&xm+1<=n&&ym-2<=n) {
a[xm+1][ym-2]=1;
}
if(xm-2>=0&&ym+1>=0&&xm-2<=n&&ym+1<=n) {
a[xm-2][ym+1]=1;
}
if(xm-1>=0&&ym-2>=0&&xm-1<=n&&ym-2<=n) {
a[xm-1][ym-2]=1;
}
if(xm-2>=0&&ym-1>=0&&xm-2<=n&&ym-1<=n) {
a[xm-2][ym-1]=1;
}
cout<<dfs(0,0);
return 0;
}
```
by Error_303 @ 2023-06-22 14:56:53