2022年马踏棋盘程序设计方案.docx
《2022年马踏棋盘程序设计方案.docx》由会员分享,可在线阅读,更多相关《2022年马踏棋盘程序设计方案.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 问题描述设计一个国际象棋的马踏棋盘的演示程序;基本要求将马随机放在国际象棋8*8 的棋盘 Board88的某个方格中, 马按走棋规就进行移动;要求每个方格只进入一次,走遍棋盘全部的 归程序,求出马的行走路线,64 个方格;编制非递并按求出的行走路线, 将数字 1,2,3 .64 一次填入一个 8*8 的方阵 输出之测试数据可自行指定一个马的初始位置(i,j),0=i,j=7.;实现提示一般说来,当马位于位置(i,j)时,可以走到以下8 个位置之一(i-2,j+1),i-1,j+2,i+1,j+2,i+2,j+1,i+2,j-1, i+1,j-2
2、,i-1,j-2,i-2,j-1 但是,假如( i ,j )靠近棋盘的边缘,上述有些位置可能超出棋盘范畴,成为不答应的位置; 8 个可能位置可以用一维数组Htry10 7 和 HTry20.7来表示:Htry1 0 1 2 3 4 5 6 7 -2 -1 1 2 2 1 -1 -2 Htry2 0 1 2 3 4 5 6 7 1 2 2 1 -1 -2 -2 -1 Htry2h ),位于(i,j)的马可以走到新位置是在棋盘范畴内的 (i+ Htry1h,j+ 其中 h=0,1, .7. 一需求分析1输入的形式和输入值的范畴;分开输入马的初始行坐标X 和列坐标 Y,X 和 Y 的范畴都是 0,7
3、 ;2输出的形式;一共供应了 2 种输出方式:(1)以数组下标形式输入,代表起始位置,i 表示行标, j 表示列标;(2)以棋盘形式输出,每一格打印马走的步数,这种方式比较直观;3程序所能达到的功能;名师归纳总结 让马从任一起点动身都能够历遍整个8 8 的棋盘;第 1 页,共 9 页- - - - - - -精选学习资料 - - - - - - - - - 二概要设计1设定栈的抽象数据类型定义:ADT Stack 数据对象: D=ai|ai CharSet,i=1,2.,n 数据关系 :R1=|ai-1,ai D,i=2,.,n 基本操作 :这里仅列举此题中使用的操作 InitStack&S
4、操作结果 :构建一个空栈;Push&S,e 操作结果 :在栈顶插入新的元素;Pop(&S,&e )操作结果:将栈顶元素弹出;SetTopS,& e 操作结果:将 e 设为栈顶元素;GetTopS, &e 操作结果:将栈顶元素取出;StackEmptyS 判定栈是否为空ADT Stack 2本程序包含 2 个模块 1.主程序模块 : Void main 初始化棋盘;while1 接受命令;处理命令; 执行 Pathx,y; 2.栈模块实现栈抽象数据类型3探讨每次挑选位置的“ 正确策略” 思路 1)先求出每个坐标点的权值,即是该坐标下一步有几个方向可以走 2)权值越小 ,就被上一点选中的可能性就越
5、大,下一个方向八个值的挑选顺 序储存 MAPXYK 数组中, 0=KS.base *e=*S.top-1; return OK; else return ERROR; Status SetTopSqStack S,SElemType *e ifS.topS.base *S.top-1=*e; return OK; else return ERROR; Status PushSqStack *S,SElemType e /* 插入元素 e 为新的栈顶元素*/ */ if*S.top-*S.base=*S.stacksize /* 栈满,追加储备空间 *S.base=SElemType*reall
6、oc*S.base,*S.stacksize+STACKINCRE MENT*sizeofSElemType; if.*S.base exitOVERFLOW; /* 储备安排失败 */ *S.top=*S.base+*S.stacksize; *S.stacksize+=STACKINCREMENT; *S.top+=e; return OK; Status PopSqStack *S,SElemType *e e 返回其值,并返回OK;否就 /* 如栈不空,就删除S 的栈顶元素,用返回 ERROR */ if*S.top=*S.base 名师归纳总结 - - - - - - -第 4 页,
7、共 9 页精选学习资料 - - - - - - - - - return ERROR; *e=*-*S.top; return OK; 2求正确策略算法求各点权值 :可走的方向数越少 ,就被上一点选中的可能性越大 int numint x1,int y1 int count1=0; forint j=0;j8;j+ int x2=x1+Htry1j; int y2=y1+Htry2j; ifPassx2,y2 count1+; return count1; 主要程序:#include #include #include #define STACK_INIT_SIZE 10 #define ST
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 年马踏 棋盘 程序设计 方案
限制150内