C语言。设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。

规则:1.马走日字2.马只能向右走。1)编写一个函数,输入A点的x和y值,按规则跳马至B点。2)在main函数中通过键盘输入x,y的初值,打印马跳过的轨迹和步数。3)采用... 规则:1. 马走日字 2. 马只能向右走。
1)编写一个函数,输入A点的x和y值,按规则跳马至B点。
2)在main函数中通过键盘输入x,y的初值,打印马跳过的轨迹和步数。
3)采用递归的思路设计该函数。提示:参见:迷宫寻路的递归算法求解。

作业题实在难...
展开
 我来答
zx198799
2014-10-31 · TA获得超过1225个赞
知道小有建树答主
回答量:509
采纳率:100%
帮助的人:278万
展开全部

#include<stdio.h>

//棋盘尺寸
#define X 4
#define Y 8
//B点坐标
#define BX 0
#define BY 8

int pos[100];
int idx = 0;
int drt[4][2]={{2,1},{1,2},{-1,2},{-2,1}};

bool expand(int 尘弯x,int y ) 
{
int 派漏闷i,xn,yn;

if (x==BX && y==BY)
return true;
if (x<0||y<0||x>X||y>Y)
return false;

for(i=0;i<4;i++)
{
xn=x+drt[i][0];
yn=y+drt[i][1];
pos[2*idx]=xn;
pos[2*idx+1]=yn;
idx++;
if (expand(xn,yn))
return true;
else
idx--;
}
return false;
}

int main( ) {
int x,y,i,j;
int ary[X+1][Y+1];

printf("请搜羡输入起始点(x,y)\n");
scanf("%d,%d",&x,&y);
pos[0]=x;
pos[1]=y;
idx=1;

if(expand(x,y))
{
for(i=0;i<=X;i++)
for(j=0;j<=Y;j++)
ary[i][j]=0;
for(i=0;i<idx;i++)
ary[pos[2*i]][pos[2*i+1]]=i+1;
for(i=0;i<=X;i++)
{
for(j=0;j<=Y;j++)
printf("%d ",ary[i][j]);
printf("\n");
}
printf("共计%d步\n",idx);
}
else
{
printf("不能从A到达B\n");
}
}
追问
: error C2061: syntax error : identifier 'expand'
: error C2059: syntax error : ';'
: error C2059: syntax error : 'type'
: warning C4013: 'expand' undefined; assuming extern returning int
这个是什么问题0 0
追答
你用的啥编译器呀?可以截图看看不
qicaiwuya3
2014-10-31 · TA获得超过181个赞
知道答主
回答量:48
采纳率:100%
帮助的人:52.6万
展开全部
//我刚写的,应该山野符合要求,前提是B点确定,如果不确定,可以再加个scanf语句,输入结束为止,传给search函数就可以了。
#include <stdio.h>

#define ROW 5
#define COL 9

int chess[ROW][COL] ; //棋盘
int step ; //记录步数

int search(int x1, int y1, int x2, int y2)
//x1和y1分别是当前位置行号和列号
//x2和y2分别是B位置行号和列号
{
int i, j ;
int success = 0 ;
if(x1 == x2 && y1 == y2) //走通
{
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
printf("%d ", chess[i][j]) ;
}
printf("\n") ;
}
return 1;
}
//逆时 针顺序 尝试四种走法
//第一种
if(x1+2<ROW && y1+1<COL)
{
step++ ; //步数+1
chess[x1+2][y1+1] = step ;
success = search(x1+2, y1+1, x2, y2) ;
if(success) //从这条路可以走通
return 1 ;
step-- ; //没走通,回退
chess[x1+2][y1+1] = 0 ;
}

//第二种颤唯或
if(x1+1<ROW && y1+2<COL)
{
step++ ; //步数+1
chess[x1+1][y1+2] = step ;
success = search(x1+1, y1+2, x2, y2) ;
if(success)
return 1 ;
step-- ; //没走通,回退
chess[x1+1][y1+2] = 0 ;
}

//第三种
if(x1-1<ROW && y1+2<COL)
{
step++ ; //步数+1
chess[x1-1][y1+2] = step ;
success = search(x1-1, y1+2, x2, y2) ;
if(success)
return 1 ;
step-- ; //没走通,回退
chess[x1-1][y1+2] = 0 ;
}

//第四种
if(x1-2<ROW && y1+1<COL)
{
step++ ; //步数茄伍+1
chess[x1-2][y1+1] = step ;
success = search(x1-2, y1+1, x2, y2) ;
if(success)
return 1 ;
step-- ; //没走通 回退
chess[x1-2][y1+1] = 0 ;
}

return 0 ;
}
int main()
{
int i, j ;
int x, y ;

for(i = 0; i < ROW; i++)
for(j = 0; j < COL; j++)
chess[i][j] = 0 ;
step = 1 ;

printf("请输入起始点(x,y)\n") ;
scanf("%d,%d", &x, &y) ;

chess[x][y] = step ;
if(search(x, y, 0, 8))
printf("共计%d步。\n", step) ;
return 0 ;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式