数据结构课程设计---汉诺塔问题

上传人:aa****6 文档编号:38379497 上传时间:2018-05-01 格式:DOC 页数:25 大小:363KB
返回 下载 相关 举报
数据结构课程设计---汉诺塔问题_第1页
第1页 / 共25页
数据结构课程设计---汉诺塔问题_第2页
第2页 / 共25页
数据结构课程设计---汉诺塔问题_第3页
第3页 / 共25页
数据结构课程设计---汉诺塔问题_第4页
第4页 / 共25页
数据结构课程设计---汉诺塔问题_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数据结构课程设计---汉诺塔问题》由会员分享,可在线阅读,更多相关《数据结构课程设计---汉诺塔问题(25页珍藏版)》请在金锄头文库上搜索。

1、1目录目录目录目录.11系统需求分析系统需求分析.21.1 问题描述.22概要设计概要设计.42.1 设计思路.4 2.2 系统总体设计.5 2.3 程序流程图.6 2.3.1 塔盘数量设置.6 2.3.2 移动速度调节.6 2.3.3 操作对象选择.7 2.3.4 汉诺塔求解流程图.83详细设计详细设计.93.1 模块设计.9 3.1.1 塔和塔显示的定义.9 3.1.2 塔盘移动的定义.11 3.1.3 塔盘移动规律的定义.12 3.1.4 主函数 main( ).124. 系统调试系统调试.145. 运行结果运行结果.146. 心得体会心得体会.197. 附录附录.207.1 参考书目.

2、20 7.2 源程序.208 评分表评分表.2521系统需求分析系统需求分析1.11.1 问题描述问题描述(一)(一) 、课程设计题目:、课程设计题目:汉诺塔问题(二)(二) 、目的与要求:、目的与要求: 1、目的: (1)要求学生达到进一步熟练掌握 C 语言的基本知识和技能; (2)基本掌握利用 VC+6.0 制作页面的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的汉诺塔问题。 2、基本要求: (1)要求利用 VC+6.0 以及 MFC 控件来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的

3、设计中,至少要用到 C 中的一种算法。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)(三) 、设计方法和基本原理:、设计方法和基本原理: 1、问题描述(功能要求): 界面划出大小不等,颜色不同的矩形块分别代表各盘子,盘子规模 n为 110,并可以选择人工控制演示和系统自动运行演示,如果是自动则还要输入演示速度。在界面的上方显示正在移动的盘子的源座和目标座。用人工操作时,按任意键移动一个盘子,这样可以清楚每一步过程。如果是自动运行,可以选择移动一步的暂停时间。要求用 Turbo C 或 VC6.0 MFC实现的汉诺塔问题的图形程序。

4、设计思路:用栈存放塔,定义三个堆栈,用来表示三个塔座,栈的每个结点类型为结构体,其中数据域存放盘子的代号,根据代号计算盘子的大小。Top 为塔的栈顶指针,即每个塔的具体高度。例如,结构体可以定义如下:Struct H3 int data15;/*存放每个盘的代号*/int top;/*每个塔的具体高度*/num3;2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)利用 VC+中的 MFC 控件制作出汉诺塔运行页面;(2)完成类中各个成员函数的定义;(3)完成系统的应用模块,根据不同按键的功能,在源程序中填入相应的代码;(4)功能调试;(5)完成系统总结报告以及系统使用

5、说明书。42概要设计概要设计2.1设计思路对于一个类似的这样的问题,任何一个人都不可能直接写出移动盘子的每一个具体步骤。可以利用这样的统筹管理的办法求解:我们假设把该任务交给一个僧人,为了方便叙述,将他编号为 64。僧人自然会这样想:假如有另外一个僧人能有办法将 63 个盘子从一个座移到另一个座,那么问题就解决了,此时僧人64 只需这样做:1. 命令僧人 63 将 63 个盘子从 A 座移到 C 座2. 自己将最底下的最大的一个盘子从 A 座移到 C 座3. 再命令僧人 63 将 63 个盘子从 B 座移到 C 座为了解决将 63 个盘子从 A 座移到 B 座的问题,僧人 63 又想:如果能再

6、有一个僧人 62 能将 62 个盘子移动到另一座,我就能将 63 个盘子从 A 座移动到 B座。他是这样做的:1. 命令僧人 62 将 62 个盘子从 A 移动到 C2. 自己将一个盘子从 A 座移动到 B 座3. 再命令僧人 62 将 62 个盘子移到 B 座再进行一次递归。如此“层层下放” ,直到后来找到第 2 个僧人,让他完成将 2 个盘子从一个座移到另一个座,进行到此,问题就解决了。最后找到第 1个僧人,让他完成将一个盘子从一个座移动到另一个座,至此,全部工作已经完成,都是可以执行的。按照如此的思路设计递归算法,很容易得出盘子的移动方案。另外是图形演示盘子的移动过程。为了能够更加形象的

7、表示盘子的移动过程。在设计图形演示的时候,我们采用了图形动态演示。首先我们将字幕、柱子、以及提示信息等等屏幕内容设置成固定不变,我们这里称之为舞台。我们将盘子看作对象,一个盘子一个对象。在设计演示过程的时候,只需要将盘子对象放置于二维界面中的不同信置,通过刷新屏幕,实现动画显示。52.2 系统总体设计系统总体设计先对程序进行各功能类的定义,定义汉诺塔,显示塔的定义,运行盘子移动的函数,一般可以使用移动、显示等功能,运用数据结构的相关知识,利用一定的算法制作出汉诺塔程序。能输入塔盘的数量(10 以内)和塔盘移动速度,支持人和电脑操作,并且显示移动过程和移动次数,实现汉诺塔的动态掩饰,总的设计思路

8、如下图所示:该出租车计费系统由四个模块组成,分别是:塔盘数量设置:在 1 到 10 之间 移动速度调节: 以 1000 为一秒,输入移动速度操作对象选择:有人和电脑连个对象选择 移动过程显示:将盘子移动的过程显示出来 各模块之间的关系为:汉诺塔游戏塔盘数量设置移动速度调节操作对象选择移动过程显示图 1.汉诺塔功能结构体图62.3 程序流程图程序流程图2.3.1塔盘数量设置塔盘数量设置输入nn10n=10NYta0.h=n图 2.1塔盘数量设置部分2.3.2移动速度调节移动速度调节输入速度 speedspeed 是否 小于 1000?ynSpeed/1000( s)图 2.2移动速度调节部分72.3.3操作对象选择操作对象选择输入操作对象: computerorpeoplecomputerorpeople!=1 scanf(“%d“, printf(“请选择:输入 1 由电脑自动控制;n“); printf(“ 输入 2 由人控制。n“); printf(“请输入:“); scanf(“%d“, if(computerorpeople!=1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号