ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:28.66KB ,
资源ID:7278514      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7278514.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版马踏棋盘实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版马踏棋盘实验报告.docx

1、完整word版马踏棋盘实验报告实验题目:马踏棋盘1.需求分析*问题描述:将马随机放在国际象棋的8X8棋盘Bo阿rd0.7,0.7的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,64依次填入8X8的方阵输出之。*测试数据:由读者指定,可自行指定一个马的初始位置。*实现提示:每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。并探讨每次选择位置的“最佳策略”,以减少回溯的次数。2、概要设计为了实现上述程序功能,可以采用顺

2、序栈或者链栈来存储它的数据,本实验所需要的存储空间不是很大,不需动态的开辟很多空间,所以采用相对简单的顺序栈来存储数据,既方便有简单,而用链栈在实现上相对比顺序栈复杂的一点。本程序使用的是顺序栈。3、详细设计(1)、顺序栈的抽象数据类型定义:ADTStack数据对象:D=ai|ai(0,1,9),i=0,1,2,n,n0数据关系:R=|ai-1,aiD,i=1,2,nADTStack(2)本程序包含三个模块:1、主程序模块:voidmain()定义变量;接受命令;处理命令;退出;2、起始坐标函数模块马儿在棋盘上的起始位置;3、探寻路径函数模块马儿每个方向进行尝试,直到试完整个棋盘;4、输出路径

3、函数模块输出马儿行走的路径;4、调试分析(1)、本次实验的主要目的是在于掌握和理解栈的特性和它的应用。在编制该程序中遇到了很多问题。首先,在开始刚编制程序的时候遇到的问题是,程序编译都通不过,主要在一些细节的问题上,还有在程序的返回值在刚开始时也没有正确返回。经过编译慢慢调试,编译都能通过,没有错误和警告。(2)、虽然编译都能通过,但是运行时却出错,程序不能终止,只有通过人工方式结束程序,可能是在某些地方出现了无限死循环了,然后在仔细检查代码,发现没有标记马儿尝试的方向dir,这样的话,马儿回溯的时候,下一次又有可能走那个方向,这样就出现了死循环。(3)、标记好马儿尝试的方向后,编译运行,但是

4、运行结果却不符合程序所要求的结果,说明在算法上肯定有错误,检查发现,马儿走的坐标没有控制后,它的横纵坐标必须控制0到7之间,否则的话马儿就会踏出棋盘以外,这样输出的结果就不对。还有就是棋盘走过的位置要标记一下,以便下次走不重复走,当回溯的时候的记得把标记给清掉,这个地方有时候也很容易混淆。5、用户使用说明见代码注释6、测试结果#include#define MAXSIZE 100#define N 8int board88;/定义棋盘int H18=-2,-1,1,2,2,1,-1,-2;/存储马各个出口位置相对与当前位置行下标的增量int H28=1,2,2,1,-1,-2,-2,-1;/存

5、储马各个出口位置相对与当前位置列下标的增量struct Stack /定义栈 int i; /行 int j; /列 int dir; /方向stackMAXSIZE;int top=-1;void Initlocation(int xi,int yi);/起始位置坐标int Trypath(int i,int j);/不断尝试void Display();/输出路径void Initlocation(int xi,int yi) int x,y; top+; stacktop.i=xi;/进栈 stacktop.j=yi; stacktop.dir=-1; boardxiyi=top+1;/

6、标记棋盘 x=stacktop.i;/起始位置的坐标赋给棋盘的坐标 y=stacktop.j; if( Trypath(x,y) Display(); else printf(无解);int Trypath(int i,int j) int find,dir,num,min;/临时变量 int i1,j1,h,k,s; int a8,b18,b28,d8; while(top-1)/栈不空时循环 for(h=0;h=0&i=0&j8)/如果找到下一位置 for(k=0;k=0&i1=0&j18)/如果找到下一位置 num+;/记录条数 /将条数存入数组 ah=num; for(h=0;h8;h

7、+)/根据可行路径条数小到大按下表排序放入数组d8 min=9; for(k=0;kak) min=ak; dh=k;/将下表存入数组a8 s=k; as=9; dir=stacktop.dir; if(top=63)/如果走完整个棋盘返回1 return(1); find=0;/表示没有找到下一个位置 for(h=dir+1;h=0&i=0&j8)/如果找到下一位置 find=1;/表示找到下一位置 break; if(find=1)/如果找到下一位置进栈 stacktop.dir=dir;/存储结点方向 top+; stacktop.i=i; stacktop.j=j; stacktop.

8、dir=-1;/重新初始化下一栈结点的尝试方向 boardij=top+1;/标记棋盘 else/否则退栈 boardstacktop.istacktop.j=0; top-; return(0); void Display() int i,j; for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,boardij);/输出马儿在棋盘上的路径 printf(nn); printf(n); void main() int i,j; int x,y; for(i=0;iN;i+)/初始化棋盘 for(j=0;jN;j+) boardij=0; printf(input x= );/输入起始位置横坐标 scanf(%d,&x); printf(input y= );/输入起始位置纵坐标 scanf(%d,&y); Initlocation(x-1,y-1);/调用起始坐标函数

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1