数据结构课程设计 马踏棋盘概况Word文档下载推荐.docx
《数据结构课程设计 马踏棋盘概况Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 马踏棋盘概况Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
从中我也学到了很多,不仅仅是课堂外的新知识,还有那种会查资料,会学习新知识的能力。
这个课程设计的顺利完成,离不开胡老师的指导和帮助,在他的细心指导和帮助下,我对马踏棋盘程序开发的整个流程有了深刻地了解和系统地掌握,在这里学生表示真诚地感谢。
另外也谢谢这次课程设计提供给我帮助的同学们。
此外,本课程设计还参考了一些文献资料,在此向这些文献资料的作者深表谢意。
本课程设计可作为数据结构和Java课程教学的参考案例。
由于时间仓促和本人水平所限,设计中难免有不当和欠妥之处,敬请老师不吝批评指正。
笔者
2016.6
目录
摘要………………………………………………………………………………………………………………………………………3
第一章需求分析………………………………………………………………………………………………………………….4
第二章概要设计………………………………………………………………………………………………………………….5
2.1系统描述。
。
………………………………………………………………….5
2.2运行环境…………………………………………………………………………..5
2.3马踏棋盘流程…………………………………………………5
2.4算法设计
第三章详细设计
3.1Jisuan类实现
3.2
3.3
3.4
Disizhang
4.1
4,2
4.3
Diwu
5.1
5.2
Cankaowenxian
Fulu
摘要
本课程设计中的程序实现了马踏棋盘问题的求解,并能够演示起始位置在棋盘上任何位置的问题的实现.程序采用图形演示,使算法的描述更形象,更生动,使教学更能产生良好的效果。
对于该程序,我严格按照面向对象的思想进行开发,其中有Jisuan类,Shuchu类,Jframe类和Main四个类。
其中Jisuan类主要是初始化各点的可走路径,并且删除不合法的点;
Shuchu类主要最优算法的实现;
Jframe类为图形用户界面的设计,主要完成棋盘的绘制和结果的打印;
Main类主要是负责整个程序的控制。
最终调试运行通过,实现了全部要求,取得了理想效果。
关键词:
数据结构马踏棋盘Java图形界面
Abstract
Thiscoursedesignoftheprogramrealizationhorsesonboardthesolution,andtodemonstratethestartingpositionontheboardoftherealizationoftheproblemanyposition.Theprogramusinggraphicalpresentation,themethodofmoreimage,themorevividdescription,andmaketheteachingmorecanproducegoodeffect.Fortheprogram,Iinstrictaccordancewiththeobject-orientedideasofdevelopment,includingJisuanclass,Shuchuclass,JframeclassesandMainfourclasses.AmongthemJisuankindbasicallyistheinitialpointsofwalkpath,andremovenotlegalpoint;
Shuchumainkindsoftherealizationoftheoptimalalgorithm;
Jframeclassforthegraphicaluserinterfacedesign,themainfinishdrawingtheboardandresultsoftheprint;
Mainkindsofmajorisresponsiblefortheentireprocesscontrol.Finaltestandoperation,realizetherequirementsthroughall,maketheidealeffect.
Keywords:
datastructurehorseonboardJavagraphicalinterface
第一章需求分析
数据结构课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完《数据结构》课程后进行的一次全面的综合练习。
其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对数据结构的基础理论知识的理解,培养学生综合运用所学理论知识解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。
马踏棋盘问题是一个古老而著名的问题,它最初是由大数学家Euler提出的.
问题是这样的:
国际象棋中的棋子(叫作马)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?
(马按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格)
本程序实现了马踏棋盘问题的求解,并能够演示起始位置在棋盘上任何位置的问题的实现.程序采用图形演示,使算法的描述更形象,更生动,使教学更能产生良好的效果。
第二章概要设计
2.1系统描述
本程序采用myeclipse8.5.0来编制整个程序,这样既可以使大家对算法的实现有了一定的了解,也可以熟悉一下Java图形界面以及Java语言的命名规范。
作为数据结构的课程设计,本人希望同时也能让大家顺便熟悉一下Java的基本语言结构和强大的开发能力。
在马踏棋盘的课程设计中,我们严格按照面向对象的思想进行开发,其中有Jisuan类,Shuchu类,Jframe类和Main类。
读者应注意各个类之间的关系,以便也能顺道理解Java中类的思想。
2.2运行环境
本程序是在windows7,myeclipse8.5.0的环境下运行的。
2.3马踏棋盘流程
将马随机地放在国际象棋的8*8棋盘Board[8][8]的某个方格中,然后令马按走棋规则开始进行移动。
2.4.1设计思想
利用某种算法直接找到最优解,算出最优路径,而不是一步步尝试遇到错误回溯。
设一数组与棋盘坐标一一对应(1,1)到(8,8),存放每个棋盘格上应算出的路径数字。
路径从1~64存放到与棋盘数组中对应的数组中,将数组当形参传到图形用户界面,利用Graphics绘制棋盘并打印数组。
建立主函数,调用计算路径类和绘制棋盘类。
2.4.2程序结构说明
程序的运行关系如图2-1.
图2-1程序运行关系图
2.4.3算法结构设计
最优算法设计
准备阶段:
(a)按国际象棋马的走法,最多有8种可能,创建数组intpath[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}}存放8中可能,为了满足与棋盘一一对应故用3×
8数组。
(b)创建数组int[][]way=newint[9][9]存放棋盘每点可走的路径数。
(c)创建数组int[][]output=newint[9][9]存放最终绘制棋盘格中输出的数字,即行走路线。
(d)计算出棋盘上每点的可走路径数,存入way数组,超出棋盘边界的点被舍弃,让数组与棋盘一一对应。
计算阶段:
(a)从用户输入起始点坐标,存入m,n。
(b)先假设每个点最小可走路径数为min=8。
(c)根据way数组中已经存放的值与假设的最小可走路径数为8比较,若小于8则存入min,如此循环最多8次,找出使min值最小的点,设为下次要走的点,依次类推,直至找出64个点,即最优路径。
用户输入
利用java提供的Scanner函数从操作台进行输入。
图形用户界面
利用Jframe窗体建立图形用户界面,编写构造函数,用Graphics()函数绘制矩形并填充颜色,画出棋盘表格,并利用drawString()在相应的棋盘坐标中打印出output数组中数字。
publicclassjisuan{//计算棋盘中各点可走路径
publicvoidinit(int[][]way){
inti,j,k,x,y;
intpath[][]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};
//存放马的行走规则,为了使坐标和棋盘一一对应,定义8×
3数组
for(i=1;
i<
=8;
i++)//先初始各点可走路径为零
for(j=1;
j<
j++)
way[i][j]=0;
for(i=1;
i++)//计算各点可走路径,如果合法便存储
for(k=1;
k<
k++)
{x=i;
y=j;
x=x+path[k][1];
y=y+path[k][2];
//x,y代表走下一步后的坐标,通过k的增长,改变行走的方向
if(x>
=1&
&
x<
=8&
y>
y<
=8)//判断是否落在棋盘内,否则不存储
way[i][j]++;
}
}//init
}//jisuan
注释:
此类主要初始化各点的可走路径,并且删除不合法的点。
首先初始化way数组为0,然后利用for循环嵌套实现64次运算,每次再嵌套一个执行8次的循环,利用k++实现改变行走路线,前提是path数组中已经存储了马的行走规则,根据每次到达的点判断是否落在棋盘内,若合法则相应坐标格的way数组自加1,以此来计算出棋盘中各点的可走路线数,完成最优算法的准备阶段。
3.2Shuchu类算法实现
publicclassshuchu{
publicvoidcalcu(int[][]ou