C语言,中国象棋 马走日 问题,求解,急!!!

设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。规则:1.马走日字2.马只能向右走。找出从A跳到B的某一途径。1)编写一个函... 设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。
规则:1. 马走日字 2. 马只能向右走。找出从A跳到B的某一途径。
1)编写一个函数,输入A点的x和 y值,按规则跳马至B点。
2)在main函数中通过键盘输入x,y的初值,打印马跳过的轨迹和步数。
3)采用递归的思路设计该函数。
展开
 我来答
醉俊杰fyy
推荐于2018-04-07 · TA获得超过195个赞
知道小有建树答主
回答量:121
采纳率:100%
帮助的人:121万
展开全部

本着乐于助人以及自我锻炼的原则,帮楼主敲了敲代码,还有疑问的话请追问。

#include <stdio.h>
#include <memory.h>
typedef struct
{
 int x, y;
}item;
item move[4] = {{-2,1}, {-1,2}, {1,2}, {2,1}};
int map[5][9], sx, sy;
//判断是否在地图中,防止越界
int checkIn(int x, int y)
{
 if(x >= 0 && x <= 4 && y >= 0 && y <= 8)
  return 1;
 return 0;
}
//输出最终结果
void output()
{
 int i, j;
 for(i = 0; i <= 4; i++)
 {
  for(j = 0; j <= 8; j++)
   printf("%d ",map[i][j]);
  putchar('\n');
 }
 printf("共计%d步。", map[0][8]);
}
//从x y开始寻找能否到达终点,能返回1,不能返回0,step表示当前的步数。
int findPath(int x, int y, int step)
{
 int i;
 map[x][y] = step;
 //终点
 if(x == 0 && y == 8)
 {
  output();
  return 1;
 }
 //向右边4个方向前进
 for(i = 0; i < 4; i++)
  if(checkIn(x+move[i].x, y+move[i].y))
   if(findPath(x+move[i].x, y+move[i].y, step+1) == 1)
    return 1;
 //四个方向均无法到达终点,回溯并返回0
 map[x][y] = 0;
 return 0;
}
int main(int argc, char ** argv)
{
 memset(map, 0, sizeof(map));
 printf("请输入起点<x,y>\n");
 scanf("%d,%d", &sx, &sy);
 findPath(sx, sy, 1);
 return 0;
}
TLast_Ghost
2014-11-05 · TA获得超过1542个赞
知道小有建树答主
回答量:649
采纳率:20%
帮助的人:511万
展开全部
这就是个差补运算,每次你只走到与目的地最接近45度角,直道最后你会变成一个'口' 字或者一个 '一'字,或者直接走到,然后就是固定路数走到。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式