#include<stdio.h>
#define M 17
#define N 17
void main()
{
int m,n,x,y,tx,ty,i,j; //m,n 是B坐标,x,y 是马的位置坐标
printf("请按次序输入点B和马点的坐标\n");
scanf("%d%d%d%d",&n,&m,&x,&y);
int dx[]={2,1,-1,-2,-2-1,1,2}; //马 控制的九个点
int dy[]={1,2,2,1,-1,-2,-2,-1};
int g[N][M],f[N][M]; //棋盘大小声明
for(i=0;i<=n;i++) //n,m 就是坐标值
{
for(j=0;j<=m;j++)
{
f[i][j]=0; //到达每一点的方法初始化为0;
g[i][j]=1; //假设每一点可到达
}
}
g[x][y]=0; //马的位置点 为不可到达
//将马的八个控制点更改为为不可到达
for(i=0;i<8;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=0&&ty>=0&&tx<=n&&ty<=m) //是否越界(超出棋盘)
g[tx][ty]=0;
}
//递推的初始值确定:起点 最左边 最上边 共三条路径
if(g[0][0]==1)
f[0][0]=1;
for(i=1;i<=n;i++)
{
if(g[i][0]==1)
{
f[i][0]=f[i-1][0];
}
}
for(j=1;j<=m;j++)
{
if(g[0][j]==1)
{
f[0][j]=f[0][j-1];
}
}
//开始递推求和
for(i=1;i<=n;i++) //下标是从1开始的,不是0;
{
for(j=1;j<=m;j++)
{
if(g[i][j]==1)
f[i][j]=f[i][j-1]+f[i-1][j];
}
}
printf("THE FINAL RESULT IS %d\n",f[n][m]);
}
#define M 17
#define N 17
void main()
{
int m,n,x,y,tx,ty,i,j; //m,n 是B坐标,x,y 是马的位置坐标
printf("请按次序输入点B和马点的坐标\n");
scanf("%d%d%d%d",&n,&m,&x,&y);
int dx[]={2,1,-1,-2,-2-1,1,2}; //马 控制的九个点
int dy[]={1,2,2,1,-1,-2,-2,-1};
int g[N][M],f[N][M]; //棋盘大小声明
for(i=0;i<=n;i++) //n,m 就是坐标值
{
for(j=0;j<=m;j++)
{
f[i][j]=0; //到达每一点的方法初始化为0;
g[i][j]=1; //假设每一点可到达
}
}
g[x][y]=0; //马的位置点 为不可到达
//将马的八个控制点更改为为不可到达
for(i=0;i<8;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx>=0&&ty>=0&&tx<=n&&ty<=m) //是否越界(超出棋盘)
g[tx][ty]=0;
}
//递推的初始值确定:起点 最左边 最上边 共三条路径
if(g[0][0]==1)
f[0][0]=1;
for(i=1;i<=n;i++)
{
if(g[i][0]==1)
{
f[i][0]=f[i-1][0];
}
}
for(j=1;j<=m;j++)
{
if(g[0][j]==1)
{
f[0][j]=f[0][j-1];
}
}
//开始递推求和
for(i=1;i<=n;i++) //下标是从1开始的,不是0;
{
for(j=1;j<=m;j++)
{
if(g[i][j]==1)
f[i][j]=f[i][j-1]+f[i-1][j];
}
}
printf("THE FINAL RESULT IS %d\n",f[n][m]);
}