下面的代码输出总是为0,不知道错哪里
#include<cstdio>
int n,m,hx,hy; //n:B点x坐标 m:B点y坐标 hx:马的x坐标 hy:马的y坐标
int h[2][9]; //马的控制点的位置
int map[21][21]; //定义地图(标数法)
bool cango[21][21]; //定义地图哪一些位置可以走
void init() //初始化
{
for(int i=0;i<=n;i++) //将所有位置标记true和0
for(int j=0;j<=m;j++)
{
cango[i][j]=true;
map[i][j]=0;
}
cango[hx][hy]=false; //马的位置标记false
for(int i=0;i<=n;i++) map[i][0]=1; //(标数法)上边标1
for(int j=0;j<=m;j++) map[0][j]=1; //(标数法)左边标1
for(int k=1;k<=8;k++) //马的控制点初始化
{
h[1][k]=-1;
h[2][k]=-1;
}
}
void calculate() //计算马的控制点
{
int x,y;
//P1
x=hx+2;
y=hy+1;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[1][1]=x;
h[1][2]=y;
}
//P2
x=hx+1;
y=hy+2;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[2][1]=x;
h[2][2]=y;
}
//P3
x=hx-1;
y=hy+2;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[3][1]=x;
h[3][2]=y;
}
//P4
x=hx-2;
y=hy+1;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[4][1]=x;
h[4][2]=y;
}
//P5
x=hx-2;
y=hy-1;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[5][1]=x;
h[5][2]=y;
}
//P6
x=hx-1;
y=hy-2;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[6][1]=x;
h[6][2]=y;
}
//P7
x=hx+1;
y=hy-2;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[7][1]=x;
h[7][2]=y;
}
//P8
x=hx+2;
y=hy-1;
if(!(x>n||x<0||y>m||y<0))
{
cango[x][y]=false;
h[8][1]=x;
h[8][2]=y;
}
}
void sign() //标记
{
for(int k=1;k<=8;k++) map[h[1][k]][h[2][k]]=0; //(标记法)将马的控制点设置为0
for(int i=1;i<=n;i++) //开始标记
for(int j=1;j<=m;j++)
if(map[i][j]!=0) map[i][j]=map[i-1][j]+map[i][j-1];
}
int main()
{
scanf("%d %d %d %d",&n,&m,&hx,&hy); //输入
init(); //初始化
calculate(); //计算马的控制点
sign();
printf("%d",map[n][m]);
return 0;
}