900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 骑士游历数组任意起点c语言 java课程设计骑士游历程序的开发

骑士游历数组任意起点c语言 java课程设计骑士游历程序的开发

时间:2022-04-30 08:13:51

相关推荐

骑士游历数组任意起点c语言 java课程设计骑士游历程序的开发

《java课程设计骑士游历程序的开发》由会员分享,可在线阅读,更多相关《java课程设计骑士游历程序的开发(25页珍藏版)》请在人人文库网上搜索。

1、JAVA程序设计 课程设计报告课 题: 骑士游历程序的开发 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: .06.10 评阅意见:评定成绩:指导老师签名:年 月 日目 录一 系统描述2二 设计目的与意义2三 分析与设计33.1 创建骑士游历程序33.2 功能模块划分33.3 系统详细设计文档53.3.1 类的划分及相互关系53.3.2 系统或模块的流程图53.4 各个模块的实现方法描述63.4.1 AccessibleSquare算法实现63.4.2 图形化界面93.4.3 主调用程序的设计和开发103.5 测试数据及期望结果11四 系统测试11五 总结或心得体会。

2、15六 参考文献16七 附录16一 系统描述骑士游历问题是一个古老而著名的问题,它最初是由大数学家Euler提出的.问题是这样的:国际象棋中的棋子(叫作骑士)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?(骑士按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格) 即:有一个n*m的棋盘(2n50,2m50),在棋盘(x1,y1)点即第x1行第y1列有一个中国象棋马,马走的规则为:(1)马走日字;(2)马只能向右走任务:求出从起始点到棋盘最右边的所有路径。本程序实现了骑士游历问题的求解,并能够演示起始位置在棋盘上任何位置的游历问题的实现.程序采用动态的图形演示,使算。

3、法的描述更形象,更生动,使教学能产生良好的效果。本程序采用Applet来编制整个程序,这样既可以使大家对算法的实现有了一定的了解,也可以熟悉一下Java图形界面, Applet以及Java语言的命名规范,让大家熟悉Java的基本语言结构和强大的开发能力。在骑士游历的课程设计中,严格按照面向对象的思想进行开发,其中有AccessibleSquare 类,MyPanel类和KnightsTour类.我们应注意各个类之间的关系,以便更深入地理解Java中类的思想。二 设计目的与意义Java课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完Java程序设计课程后进行的一次全面的综合练。

4、习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。三 分析与设计解决本程序的问题的关键在于如何让骑士按日字行走,如何计算骑士从开始位置到结束位置所走的步数以及如何保证所得的步数为骑士从开始位置到结束位置所需要的最小的步数,并且可以输入多组数据测试多组最小的步数。骑士行走路径为“L”型,即下图所示:图3.1 马走的规则当n,m 给出之后,同时给出马起始的位置和终点的位置,试找出从起点到终点的所有路径的数目。例如:(n。

5、=10,m=10),(1,5)(起点),(3,5)(终点)。应输出2(即由(1,5)到(3,5)共有2条路径,如下图):图3.2 马走的所有路径如此,骑士每走一步都按照此方式步进,直至整个棋盘都被“游走”一遍则完成。3.1 创建骑士游历程序在对eclipse的基本常识有了初步的了解后,就可以起步创建骑士游历程序了。创建过程如下:(1)单击桌面图标,启动eclipse开发平台进入一个新的工程界面。(2)命名新的工程并保存文件,方法是单击菜单FileNew Project,出现一个对话框窗口,将工程名为Knighttour,选择保存工程文件目录之后,单击Finish按钮完成骑士游历工程的创建。3.。

6、2 功能模块划分整个程序界面由三部分组成,上方有两个工具栏,一个是,一个是小程序应用,其中可以执行还原(R)、移动(M)、大小(S)、最大化(N)、最小化(X)、关闭(C)的操作,小程序应用则可执行重新启动、重新加载、停止、保存、启动、克隆、标记、信息、编辑、字符编码、打印、属性、关闭、退出的相应操作。中间是骑士游历的效果显示图,动态演示骑士游历的过程;最下边一排是NextTour和NextMoving两个按钮,单击NextTour按钮可以重新开始一个新的游历,单击NextMoving按钮,则显示骑士要走的下一步。如图 2.1.1所示(这是骑士在第一个格子起始位置进行游历的情况,如果想在其他的。

7、位置开始游历,直接单击NextTour按钮就可以了,程序实现的骑士的起始位置的方式是按照从第一列第一个开始、直到最后一列、最后一行)。另外,可以由边框的颜色的不同,判断骑士的初始位置、上一步所走的位置和现在所处的位置。单击NextMoving按钮可以显示骑士游历的下一个位置。连续单击直到64个格子全部都走完,可以清晰的显示整个游历的过程。图3.2.1和3.2.2显示的是骑士游历起始位置在第一个格子和游历到中间位置的一个中间状态。当然,骑士可以在棋盘的任何位置开始。图3.2.1 骑士在第一个格子的情况图3.2.2 骑士在第一个格子的游历的中间状态3.3 系统详细设计文档3.3.1 类的划分及相互。

8、关系本程序由三个类组成一个工程文件。其中KinghtsTour 是主类,或者说是控制类,AccessibleSquare类主要是算法的实现,MyPanel类实现图形化显示结果。程序的运行关系图如图3.3.1所示。Accessible Square类KinghtsTour主类MyPanel类图3.3.1 程序运行关系图3.3.2 系统或模块的流程图系统流程图:图3.3.2 系统流程图3.4 各个模块的实现方法描述此程序主要分为三个部分:第一部分主要讲解算法编程目的,让大家熟悉Java的计算功能;第二部分是图形化界面,主要讲解Appelt的图形化的界面以及如何利用图形用户界面的控件接受用户信息,并。

9、用图形或图像显示结果;第三部分是控制类通过响应Button时间完成对算法类画图类的调用。3.4.1 AccessibleSquare算法实现AccessibleSquare类主要是算法实现,采用启发式算法.(1)先把8个可能走的方向用两个数组(horizontal 和vertical )表示出来,选择走哪个方向就在原坐标上进行相应的加法,表示骑士到了一个新的位置. horizontal 和vertical 表示骑士8个方向走L形状所需的X坐标和Y坐标的变化量: horizontal = 2,1,-1,-2,-2,-1,1,2, vertical = -1,-2,-2,-1,1,2,2,1. 坐。

10、标图如下:65432187图3.4.1 骑士游历走向坐标图(2)由于程序采用启发式算法,应考察每一方格的可到达性.使用数组accessibility 表示可达到数,并当骑士游历时,程序动态修正剩余格子的可达到数. accessibility arrayPos = 0 表明格子已经被占据.(3)使用冒泡法来查询最小数. 冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。重复以。

11、上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。class AccessibleSquares /骑士8个方向走L形状所需的X坐标和Y坐标的变化量private static int horizontal = 2,1,-1,-2,-2,-1,1,2;private static int vertical = -1,。

12、-2,-2,-1,1,2,2,1;private int xpos ;/骑士所处X轴的坐标private int ypos ;/骑士所处y轴的坐标private int accessibility ;/表示可达到数private int ownxpos ,ownypos ;private int ownAccessibility ;private int arrayPos ;private int countAccessibility;public AccessibleSquares(int x , int y )/构造函数int testXPos; int testYPos;xpos = n。

13、ew int 8 ;/骑士所处X轴的坐标ypos = new int 8 ;accessibility = new int 8 ;arrayPos = 0 ;ownxpos = x ; ownypos = y ;ownAccessibility = KnightsTour.access x y ;for (int i = 0 ; i = 0 ) & ( testXPos = 0 ) & ( testYPos 0 ) arrayPos + ;/寻找空格子结束/ 结束for循环,寻找结束countAccessibility = arrayPos ;/统计可达到数if (countAccessibi。

14、lity 0 ) sortAll();arrayPos = -1 ;public boolean hasMoreAccessible()/ arrayPos + 1 指向下一个可行的if ( (arrayPos + 1 ) = 0) & (pos accessibility i )swapAll( begin, i ); /end of if/ end of inner for/ end of outer for/ end of sortAll/交换两个数private void swapAll ( int i , int j )int temp ;temp = xpos i ; xpos i。

15、 = xpos j ; xpos j = temp;temp = ypos i ; ypos i = ypos j ; ypos j = temp;temp = accessibility i ;accessibility i = accessibility j ; accessibility j = temp;/进行移动操作public void domoving()for ( int i = 0 ; i = 0 ) & ( testXPos = 0 ) & ( testYPos 0 ) arrayPos + ;/寻找空格子结束/ 结束for循环,寻找结束countAccessibility。

16、 = arrayPos ;/统计可达到数if (countAccessibility 0 ) sortAll();arrayPos = -1 ;public boolean hasMoreAccessible()/ arrayPos + 1 指向下一个可行的if ( (arrayPos + 1 ) = 0) & (pos accessibility i )swapAll( begin, i ); /end of if/ end of inner for/ end of outer for/ end of sortAll/交换两个数private void swapAll ( int i , i。

17、nt j )int temp ;temp = xpos i ; xpos i = xpos j ; xpos j = temp;temp = ypos i ; ypos i = ypos j ; ypos j = temp;temp = accessibility i ;accessibility i = accessibility j ; accessibility j = temp;/进行移动操作public void domoving()for ( int i = 0 ; i countAccessibility ; i + )KnightsTour.access xpos i ypos。

18、i - ; /直到没有路径了KnightsTour.access ownxpos ownypos = 0 ;/撤消移动操作public void undomoving()for ( int i = 0 ; i countAccessibility ; i + )KnightsTour.access xpos i yposi + ; KnightsTour.access ownxpos ownypos = ownAccessibility ;/MyPanel函数实现图形化显示结果class MyPanel extends JPanel /* */private static final long。

19、 serialVersionUID = 1L;public static final int WHITE = 0 ;/用于显示棋盘public static final int BLACK = 1 ;public static final int WKNIGHT = 2 ;/用于显示骑士public static final int BKNIGHT = 3 ;private int chessboard;private int xrecord ;private int yrecord ;private int displayCount ;private int lastxpos ,lastypos ,nextxpos ,nextypos ;ImageIcon images ;public MyPanel() /MyPanel构造函数initvariance();public MyPanel( int newxrecord ,int newyrecord ) /重载构造函数initvariance();initboard( newxrecord , newyrecord );public void initvariance () chessboard = new int 8 8 ;xrecord = new int 64 ; yrecord。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。