实验五:
中国象棋中马的走法。(回溯法)
1.问题描述:
在45的棋盘上已知马的起始坐标(x,y),求马能够返回到起始位置
的不重复的所有不同走法的总数。
问题分析:
(1)读入马的起始位置,进行合法性判断;
(2)从起始位置开始搜索,搜索方法采用深搜,累计总数;
(3)输出结果。
#usual反义词
include
#include
intarray[2][8]={{-1,-1,-2,-2,2,2,1,1},{-2,2,1,-1,1,-1,2,-2}};//表
示马跳的8个方向
intchess[4][5];//表示棋盘,1:表示已经在较早的时候走过,0:则没
有
inttotal=0;//统计走法的个数
intsx,sy;//(sx,sy)表示马的起始坐标
voidfind_way(intp1,intp2);//回溯的过程
voidmain()
{inti,j;
for(i=0;i<4;i++)
for(j=0;儿童短篇故事 j<5;j++)
chess[i][j]=0;
printf("输入马的起始坐标:n");
scanf("%d",&sx);
scanf("%d",&sy);
printf("sx=%d,sy=%dn",sx,sy);
if千牛怎么上架商品 ((sx<0)||(sx>=4)||(sy<0)||(sy>=5))
printf("ERRORn");
el{
c肉糕 hess[sx][sy]=1;
find_way(sx,sy);//从起始位置开始试探
printf("total=%dn",total);
getcha人生只剩归途 r();
}
}
voidfind_way(intp1,intp2)
{inti,pi,pj;
f小炒鸡 or(i=0;i<8;i++){//向8个方向试探
pi=p1+array[0][i];
pj=p2+array[1][i];
if((sx==pi)&&(sy==pj))
total++;//找到一种走法,(sx,sy)表示起点
elif((pi>=0)&&(pi<4)&&(pj>=0)&&(pj<5)&&(chess[pi][pj]
==0)){//继续试探
chess[pi][pj]=1;
find_way(pi,pj);
chess[pi][pj]=0;
}
}/为自己喝彩作文 /for
}
测试报告
1.输入马的起始(3.4)
2.运行结果
本文发布于:2023-03-17 08:47:18,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/d9ddd55cd3a28bf7d3f6cd1f64ec16a0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:象棋马怎么走.doc
本文 PDF 下载地址:象棋马怎么走.pdf
留言与评论(共有 0 条评论) |