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)采用递归的思路设计该函数。提示:参见:迷宫寻路的递归算法求解。
作业题实在难... 展开
1)编写一个函数,输入A点的x和y值,按规则跳马至B点。
2)在main函数中通过键盘输入x,y的初值,打印马跳过的轨迹和步数。
3)采用递归的思路设计该函数。提示:参见:迷宫寻路的递归算法求解。
作业题实在难... 展开
2个回答
展开全部
#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
追答
你用的啥编译器呀?可以截图看看不
展开全部
//我刚写的,应该山野符合要求,前提是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 ;
}
#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 ;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |