马的走法C语言算法半张中国象棋棋盘,即5×9棋盘,左上角记为A(1,1),求从A点的马,只能向右行走,走到点B(m,n)的走法一共有多少种.
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 16:33:08
马的走法C语言算法半张中国象棋棋盘,即5×9棋盘,左上角记为A(1,1),求从A点的马,只能向右行走,走到点B(m,n)的走法一共有多少种.
马的走法C语言算法
半张中国象棋棋盘,即5×9棋盘,左上角记为A(1,1),求从A点的马,只能向右行走,走到点B(m,n)的走法一共有多少种.
马的走法C语言算法半张中国象棋棋盘,即5×9棋盘,左上角记为A(1,1),求从A点的马,只能向右行走,走到点B(m,n)的走法一共有多少种.
#include
/*
* 求(x1,y1)向右走到(y1,y2)可行的走法总数
*/
int getWays(int x1, int y1, int x2, int y2)
{
if(y1 > y2) //在目标右边
return 0;
else if(y1 == y2 && x1 != x2) //在目标一条垂直线上,但不是同一点
return 0;
else if(y1 == y2 && x1 == x2) //跟目标是同一点
return 1;
else{ //分治,求四种走法的总和
int result =0;
if(x1 > 1) //可以上1
result += getWays(x1 - 1, y1 + 2, x2, y2);
if(x1 > 2) //可以上2
result += getWays(x1 - 2, y1 + 1, x2, y2);
if(x1 < 5) //可以下1
result += getWays(x1 + 1, y1 + 2, x2, y2);
if(x1 < 4) //可以下2
result += getWays(x1 + 2, y1 + 1, x2, y2);
return result;
}
}
void main(void)
{
int x,y; //目标坐标
printf("请输入目标坐标:\n");
scanf("%d%d", &x, &y);
printf("总的不同走法:%d\n",getWays(1, 1, x, y));
}
不明白,再交流...