#include <stdio.h>
int mark[30][30]={0};
long long int point[30][30]={0};
int x1,y1,x2,y2;
int main()
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1++;x2++;y1++;y2++;
mark[x2][y2]=1;
mark[x2+1][y2+2]=1;
mark[x2+2][y2+1]=1;
int list[2][6]={{x2-1,x2-1,x2-2,x2-2,x2+1,x2+2},{y2+2,y2-2,y2+1,y2-1,y2-2,y2-1}};
for (int i=0;i<6;i++)
{
if (list[0][i]>=0&&list[1][i]>=0)
mark[list[0][i]][list[1][i]]=1;
}
point[1][1]=1;
for (int i=1;i<=x1;i++)
{
for (int j=1;j<=y1;j++)
{
if (mark[i][j]){/*printf("0 ");*/continue;}
point[i][j]+=point[i-1][j]+point[i][j-1];/*printf("%-3.d",point[i][j])*/;
}
}
printf("%d",point[x1][y1]);
return 0;
}
NOIP 2002 普及组第四题 mark数组表示目标格子是否有阻挡 list数组用来存放马能阻挡的格子相对位置 point数组存放每个格子能到达的方案数 本人刚学C语言不久使用的算法看起来可能有些诡异的繁杂,请各位大佬见谅 算法上感觉没问题,但是3号与4号WA了 求救