#include <iostream>
using namespace std;
long long n,m,a,b;
long long girds[25][25];
long long calc(long long x,long long y)
{
if (girds[x][y] ==-100)
{
if ((x==a&y==b)||(x==a-2&&y==b-1)||(x==a-2&&y==b+1)||(x==a-1&&y==b-2)||(x==a-1&&y==b+2)||(x==a+1&&y==b-2)||(x==a+1&&y==b+2)||(x==a+2&&y==b-1)||(x==a+2&&y==b+1))
{
girds[x][y]=0;
return 0;
}
if (x==0&&y==0)
{
girds[x][y]=1;
return 1;
}
else if (x==0)
{
girds[x][y]=calc(x,y-1);
return calc(x,y-1);
}
else if (y==0)
{
girds[x][y]=calc(x-1,y);
return calc(x-1,y);
}
else
{
girds[x][y]=calc(x-1,y)+calc(x,y-1);
return calc(x-1,y)+calc(x,y-1);
}
}
else
{
return girds[x][y];
}
}
int main()
{
cin>>n>>m>>a>>b;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
girds[i][j]=-100;
}
}
int map[n][m];
for (int i=0;i<=n;i++)
{
for (int j=0;j<=m;j++)
{
map[i][j]=calc(i,j);
cout<<map[i][j]<<" ";
}
cout<<endl;
}
cout<<calc(n,m);
}
输入
6 6 3 3
输出
1 1 1 1 1 1 0
1 2 0 1 0 1 0
1 0 0 1 1 0 0
1 1 1 0 1 1 0
1 0 1 1 2 0 0
1 1 0 1 0 0 0
0 0 0 0 0 0 0
0
为啥最右边和最下面都是0