#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d); //a,b 终点坐标 c,d 马的坐标
long long i,j,map[a+2][b+2]; //将地图由二维矩阵构成
//由于卒只可以向下和右放前进,所以只考虑左边和上边的数值,其余数值均可由对角线相加得到 (思路->搜索:组合数学之方格路径)
for(i=0;i<=a;i++)
{
for(j=0;j<=b;j++)
{
/**左边与上边**/
//不能在马的限制内
if((i==c+1&&j==d+2)||(i==c+1&&j==d-2)||(i==c+2&&j==d+1)||(i==c+2&&j==d-1)||(i==c-1&&j==d+2)||(i==c-1&&j==d-2)||(i==c-2&&j==d+1)||(i==c-2&&j==d-1)||(i==c&&j==d))
map[i][j]=0;
//最上边一行有不能到达的坐标,则同行在该点之后的坐标也无法到达
else if(i==0&&map[i][j-1]==0)
map[i][j]=0;
//最左边一列有不能到达的坐标,则同列在该点之后的坐标也无法到达
else if(j==0&&map[i-1][j]==0)
map[i][j]=0;
//其余靠边坐标军只有一条路可以到达
else if(i==0||j==0)
map[i][j]=1;
/**中间**/
//中间坐标由对角线之和产生
else
map[i][j]=map[i-1][j]+map[i][j-1];
}
}
printf("%lld",map[a][b]);
}
洛谷P1002 过河卒 C语言
于 2023-11-21 16:22:02 首次发布