马踏棋盘java程序设计报告6,数据结构课程设计 马踏棋盘

《数据结构课程设计 马踏棋盘》由会员分享,可在线阅读,更多相关《数据结构课程设计 马踏棋盘(27页珍藏版)》请在人人文库网上搜索。

1、前言学习数据结构的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题,数据结构课程设计就是为此目的一次实际训练。要求我们在对题目进行独立分析的基础上,完成设计和开发,并最终接受严格的测试考核。以深化对数据结构课程中基本概念、理论和方法的理解,提升综合运用所学知识处理实际问题的能力,使我们的的程序设计能力与调试水平有一个明显的提升。课程设计所安排的题目,都有一定的难度和深度,从抽象数据类型的提炼、数据结构选择到算法的设计,均由我们每个人自主完成。在一周的时间内,历经查找参考资料、使用技术手册、设计编码和撰写文档的实践,进一步升华对软件工程师和程序员人格素质的认识和理解。本课程设计的主要。

2、设计内容是: 设计一个马踏棋盘问题的演示程序。即将马随机地放在国际象棋的8*8棋盘的某个方格中,然后令马按走棋规则开始进行移动。要求马将棋盘上的每个方格进入且只进入一次,走遍全部64个方格。要求编制非递归程序,求出马的行走路线,将数字1,2,64依次填入一个8*8的方阵在屏幕上显示输出。针对该问题本课程设计采用的是面向对象的开发语言Java,在Windows7, myeclipse8.5.0的平台上开发出来,并有图形界面。最终较好的实现了全部要求,达到了预期效果。从中我也学到了很多,不仅仅是课堂外的新知识,还有那种会查资料,会学习新知识的能力。这个课程设计的顺利完成,离不开胡老师的指导和帮助,。

3、在他的细心指导和帮助下,我对马踏棋盘程序开发的整个流程有了深刻地了解和系统地掌握,在这里学生表示真诚地感谢。另外也谢谢这次课程设计提供给我帮助的同学们。此外,本课程设计还参考了一些文献资料,在此向这些文献资料的作者深表谢意。本课程设计可作为数据结构和Java课程教学的参考案例。由于时间仓促和本人水平所限,设计中难免有不当和欠妥之处,敬请老师不吝批评指正。笔者2016.6目录摘要3第一章 需求分析.4第二章 概要设计.52.1系统描述。.52.2运行环境.52.3马踏棋盘流程52.4算法设计第三章 详细设计3.1 Jisuan类实现3.23.33.4Disizhang 4.14,24.3Diwu。

4、 5.15.2Cankaowenxian Fulu 摘要本课程设计中的程序实现了马踏棋盘问题的求解,并能够演示起始位置在棋盘上任何位置的问题的实现.程序采用图形演示,使算法的描述更形象,更生动,使教学更能产生良好的效果。对于该程序,我严格按照面向对象的思想进行开发,其中有Jisuan类, Shuchu类, Jframe类和Main四个类。其中Jisuan类主要是初始化各点的可走路径,并且删除不合法的点;Shuchu类主要最优算法的实现;Jframe类为图形用户界面的设计,主要完成棋盘的绘制和结果的打印;Main类主要是负责整个程序的控制。最终调试运行通过,实现了全部要求,取得了理想效果。关键词。

5、:数据结构 马踏棋盘 Java 图形界面AbstractThis course design of the program realization horses on board the solution, and to demonstrate the starting position on the board of the realization of the problem any position. The program using graphical presentation, the method of more image, the more vivid description。

6、, and make the teaching more can produce good effect. For the program, I in strict accordance with the object-oriented ideas of development, including Jisuan class, Shuchu class, Jframe classes and Main four classes. Among them Jisuan kind basically is the initial points of walk path, and remove not。

7、 legal point; Shuchu main kinds of the realization of the optimal algorithm; Jframe class for the graphical user interface design, the main finish drawing the board and results of the print; Main kinds of major is responsible for the entire process control. Final test and operation, realize the requ。

8、irements through all, make the ideal effect.Key words: data structure horse on board Java graphical interface第一章 需求分析数据结构课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完数据结构课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对数据结构的基础理论知识的理解,培养学生综合运用所学理论知识解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。马踏棋盘问题是一个古老而。

9、著名的问题,它最初是由大数学家Euler提出的.问题是这样的:国际象棋中的棋子(叫作马)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?(马按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格)本程序实现了马踏棋盘问题的求解,并能够演示起始位置在棋盘上任何位置的问题的实现.程序采用图形演示,使算法的描述更形象,更生动,使教学更能产生良好的效果。第二章 概要设计2.1系统描述本程序采用myeclipse8.5.0来编制整个程序,这样既可以使大家对算法的实现有了一定的了解,也可以熟悉一下Java图形界面以及Java语言的命名规范。作为数据结构的课程设计,本人希望同时也能让。

10、大家顺便熟悉一下Java的基本语言结构和强大的开发能力。在马踏棋盘的课程设计中,我们严格按照面向对象的思想进行开发,其中有Jisuan类, Shuchu类, Jframe类和Main类。读者应注意各个类之间的关系,以便也能顺道理解Java中类的思想。2.2运行环境本程序是在windows7, myeclipse8.5.0的环境下运行的。2.3马踏棋盘流程将马随机地放在国际象棋的8*8棋盘Board88的某个方格中,然后令马按走棋规则开始进行移动。要求马将棋盘上的每个方格进入且只进入一次,走遍全部64个方格。2.4算法设计2.4.1 设计思想 利用某种算法直接找到最优解,算出最优路径,而不是一步。

11、步尝试遇到错误回溯。设一数组与棋盘坐标一一对应(1,1)到(8,8),存放每个棋盘格上应算出的路径数字。 路径从164存放到与棋盘数组中对应的数组中,将数组当形参传到图形用户界面,利用Graphics绘制棋盘并打印数组。 建立主函数,调用计算路径类和绘制棋盘类。2.4.2程序结构说明程序的运行关系如图2-1.图2-1 程序运行关系图2.4.3算法结构设计最优算法设计准备阶段:(a) 按国际象棋马的走法,最多有8种可能,创建数组int path=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中可能,为了满足与棋盘一。

12、一对应故用38数组。(b) 创建数组int way=new int99存放棋盘每点可走的路径数。(c) 创建数组int output=new int99存放最终绘制棋盘格中输出的数字,即行走路线。(d) 计算出棋盘上每点的可走路径数,存入way数组,超出棋盘边界的点被舍弃,让数组与棋盘一一对应。计算阶段:(a) 从用户输入起始点坐标,存入m,n。(b) 先假设每个点最小可走路径数为min=8。(c) 根据way数组中已经存放的值与假设的最小可走路径数为8比较,若小于8则存入min,如此循环最多8次,找出使min值最小的点,设为下次要走的点,依次类推,直至找出64个点,即最优路径。用户输入利用j。

13、ava提供的Scanner函数从操作台进行输入。图形用户界面利用Jframe窗体建立图形用户界面,编写构造函数,用Graphics()函数绘制矩形并填充颜色,画出棋盘表格,并利用drawString()在相应的棋盘坐标中打印出output数组中数字。第三章 详细设计3.1 Jisuan类实现public class jisuan /计算棋盘中各点可走路径public void init(intway)int i,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; /存放马的行走规则,为了使。

14、坐标和棋盘一一对应,定义83数组for(i=1;i=1&x=1&y=1&m=1&n=1&x=1&y=1&x=1&y=1&m=1&n=1&x=1&y=8)if(wayxy!=0) /没走过的点-wayxy; /可选路径数减1,因为本点刚走过if(wayxymin) /如果可选路径数小于 minmin=wayxy; /使axy存放最小可选路径数的点i=x;j=y; /form=i;n=j; /下一个点的坐标 /for“64次” /判断合法elseSystem.out.println(错误:坐标超出棋盘边界!); /calu /shuchu-class Jframe-import java.awt.。

15、Color;import javax.swing.*;import java.awt.Graphics;import java.awt.Font;public class Jframe extends JFrameint seed=new int99;public Jframe() /窗体构造函数this.setSize(500,500);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);public void paint(Graphics g) /创建Graphics画图super.paint(g);g.setCo。

16、lor(Color.black);g.drawRect(50,50,400,400); /画棋盘边界for(int i=1;i=4;i+)for(int j=1;j=4;j+)g.fillRect(100*j, 100*i-50, 50, 50); /画棋盘黑格1for(int i=1;i=4;i+)for(int j=1;j=4;j+)g.fillRect(100*j-50, 100*i, 50, 50); /画棋盘黑格2g.setColor(Color.blue);Font num=new Font(楷体,Font.BOLD,25);g.setFont(num); /设置字体for(int。

17、 i=1;i=8;i+)for(int j=1;j=8;j+)g.drawString(seedij+, 50*j+15,50*i+35); /打印棋盘格中数字public void write(int output) /将结果数组引入Jframe类,并赋给数组seedfor(int i=1;i=8;i+)for(int j=1;j=8;j+)seedij=outputij; /Jframe-class Main-public class Main public static void main(String args) int i,j;int way=new int99; /初始化可算路径数。

18、数组int output=new int99; /初始化结果输出数组jisuan ad=new jisuan();ad.init(way); /运行计算类shuchu aw=new shuchu();aw.calcu(output, way); /运行输出类System.out.printf(运行结果如下(稍后会以棋盘界面显示,为便于看图,相邻两步之间棋盘颜色不同):n);for(i=1;i=8;i+) /输出 for(j=1;j=8;j+)System.out.printf(%6d,outputij);System.out.printf(n);Jframe w=new Jframe(); /图形用户输出w.write(output); /载入结果输出数组 /main /Main附录B 运行截屏4.1第一次输入坐标(6,6)图4-1 第一次输入截图图4-2 第一次运行结果截图(其中数字编号即为马踏棋盘的顺序)4.2第二次输入坐标(8,1)图4-3 第二次输入截图图4-4 第二次运行结果截图4.3第三次输入坐标(5,9)图4-5 第三次输入截图图4-6 第三次运行结果截图27欢迎下载。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题描述:将马随机放在国际象棋的 8X8 棋盘中的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部 64 个方格。编制递归程序,求出马的行走路线 ,并按求出的行走路线,将数字 1,2,…,64 依次填入 8X8 的方阵输出之。测试数据:由读者指定可自行指定一个马的初始位置。实现提示:每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”悔棋使用。并探讨每次选择位置的“最佳策略”,以减少回溯的次数。 背景介绍: 国际象棋为许多令人着迷的娱乐提供了固定的框架,而这些框架常独立于游戏本身。其中的许多框架都基于骑士奇异的L型移动规则。一个经典的例子是骑士漫游问题。从十八世纪初开始,这个问题就引起了数学家和解密爱好者的注意。简单地说,这个问题要求从棋盘上任一个方格开始按规则移动骑士,使之成功的游历国际象棋棋盘的64个方格,且每个方格都接触且仅接触一次。 可以用一种简便的方法表示问题的一个解,即将数字1,……,64按骑士到达的顺序依次放入棋盘的方格中。 一种非常巧妙的解决骑士漫游地方法由J.C.Warnsdorff于1823年给出。他给出的规则是:骑士总是移向那些具有最少出口数且尚未到达的方格之一。其中出口数是指通向尚未到达方格的出口数量。在进一步的阅读之前,你可以尝试利用Warnsdorff规则手工构造出该问题的一个解。 实习任务: 编写一个程序来获得马踏棋盘即骑士漫游问题的一个解。 您的程序需要达到下面的要求: 棋盘的规模是8*8; 对于任意给定的初始化位置进行试验,得到漫游问题的解; 对每次实验,按照棋盘矩阵的方式,打印每个格被行径的顺序编号。 技术提示: 解决这类问题的关键是考虑数据在计算机中的存储表示。可能最自然的表示方法就是把棋盘存储在一个8*8的二维数组board中。以(x,y)为起点时骑士可能进行的八种移动。一般来说,位于(x,y)的骑士可能移动到以下方格之一:(x-2,y+1)、(x-1,y+2)、(x+1,y+2)、(x+2,y+1)、(x+2,y-1)、(x+1,y-2)、(x-1,y-2)、(x-2,y-1)。但请注意,如果(x,y)的位置离某一条边较近,有些可能的移动就会把骑士移到棋盘之外,而这当然是不允许的。骑士的八种可能的移动可以用一个数组MoveOffset方便地表示出来: MoveOffset[0]=(-2,1) MoveOffset[1]=(-1,2) MoveOffset[2]=(1,2) MoveOffset[3]=(2,1) MoveOffset[4]=(2,-1) MoveOffset[5]=(1,-2) MoveOffset[6]=(-1,-2) MoveOffset[7]=(-2,-1) 于是,位于(x,y)的骑士可以移动到(x+MoveOffset[k].x, y+MoveOffset[k].y),其中k是0到7之间的某个整数值,并且新方格必须仍位于棋盘上。
问题描述:将马随机放在国际象棋的 8X8 棋盘中的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部 64 个方格。编制递归程序,求出马的行走路线 ,并按求出的行走路线,将数字 1,2,…,64 依次填入 8X8 的方阵输出之。测试数据:由读者指定可自行指定一个马的初始位置。实现提示:每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”悔棋使用。并探讨每次选择位置的“最佳策略”,以减少回溯的次数。 背景介绍: 国际象棋为许多令人着迷的娱乐提供了固定的框架,而这些框架常独立于游戏本身。其中的许多框架都基于骑士奇异的L型移动规则。一个经典的例子是骑士漫游问题。从十八世纪初开始,这个问题就引起了数学家和解密爱好者的注意。简单地说,这个问题要求从棋盘上任一个方格开始按规则移动骑士,使之成功的游历国际象棋棋盘的64个方格,且每个方格都接触且仅接触一次。 可以用一种简便的方法表示问题的一个解,即将数字1,……,64按骑士到达的顺序依次放入棋盘的方格中。 一种非常巧妙的解决骑士漫游地方法由J.C.Warnsdorff于1823年给出。他给出的规则是:骑士总是移向那些具有最少出口数且尚未到达的方格之一。其中出口数是指通向尚未到达方格的出口数量。在进一步的阅读之前,你可以尝试利用Warnsdorff规则手工构造出该问题的一个解。 实习任务: 编写一个程序来获得马踏棋盘即骑士漫游问题的一个解。 您的程序需要达到下面的要求: 棋盘的规模是8*8; 对于任意给定的初始化位置进行试验,得到漫游问题的解; 对每次实验,按照棋盘矩阵的方式,打印每个格被行径的顺序编号。 技术提示: 解决这类问题的关键是考虑数据在计算机中的存储表示。可能最自然的表示方法就是把棋盘存储在一个8*8的二维数组board中。以(x,y)为起点时骑士可能进行的八种移动。一般来说,位于(x,y)的骑士可能移动到以下方格之一:(x-2,y+1)、(x-1,y+2)、(x+1,y+2)、(x+2,y+1)、(x+2,y-1)、(x+1,y-2)、(x-1,y-2)、(x-2,y-1)。但请注意,如果(x,y)的位置离某一条边较近,有些可能的移动就会把骑士移到棋盘之外,而这当然是不允许的。骑士的八种可能的移动可以用一个数组MoveOffset方便地表示出来: MoveOffset[0]=(-2,1) MoveOffset[1]=(-1,2) MoveOffset[2]=(1,2) MoveOffset[3]=(2,1) MoveOffset[4]=(2,-1) MoveOffset[5]=(1,-2) MoveOffset[6]=(-1,-2) MoveOffset[7]=(-2,-1) 于是,位于(x,y)的骑士可以移动到(x+MoveOffset[k].x, y+MoveOffset[k].y),其中k是0到7之间的某个整数值,并且新方格必须仍位于棋盘上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值