C语言。设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言。设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。相关的知识,希望对你有一定的参考价值。
规则:1. 马走日字 2. 马只能向右走。
1)编写一个函数,输入A点的x和y值,按规则跳马至B点。
2)在main函数中通过键盘输入x,y的初值,打印马跳过的轨迹和步数。
3)采用递归的思路设计该函数。提示:参见:迷宫寻路的递归算法求解。
作业题实在难...
//棋盘尺寸
#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
你用的啥编译器呀?可以截图看看不
参考技术A //我刚写的,应该符合要求,前提是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 ;
本回答被提问者采纳
以上是关于C语言。设有下图所示的一个棋盘,在棋盘上的A点,有一个中国象棋的马,并约定马走的规则,从A点跳至B点。的主要内容,如果未能解决你的问题,请参考以下文章