汉诺塔程序设计报告
- 格式:doc
- 大小:35.00 KB
- 文档页数:5
数据结构
学院 : 信息学院
班级: 计科高职13-2
姓名: 曲承玉
学号: 4044 汉诺塔程序设计报告
一、题目
汉诺塔(Towers of Hanoi)问题
二、设计要求
1、在窗口中画出初始时塔和碟子的状态。
2、可以以自动或手动两种方式搬移碟子。
3、自动搬移可以通过定时器或多线程的方法,每一次移动的时间间隔可以自定,以人眼观察比较舒服为宜,每一次的移动过程如能实现动画最好。
4、定义塔的描述类和碟子的描述类。
5、在程序中,碟子的数目及每次移动的时间间隔可以通过对话框设置(也应该有默认值)。
6、支持暂停功和继续的功能(在自动搬移过程中可以暂停,并继续)。
7、暂停后,可以将当前的状态保存(碟子和塔的组合关系)。
8、可以从7中保存的文件中读出某个状态,并继续移动。
三、问题分析
1、已知有三个塔(1、2、3)和n个从大到小的金碟子,初始状态时n个碟子按从大到小的次序从塔1的底部堆放至顶部。
2、要求把碟子都移动到塔2(按从大到小的次序从塔2的底部堆放至顶部)。
3、每次移动一个碟子。 4、任何时候、任何一个塔上都不能把大碟子放到小碟子的上面。
5、可以借助塔3。(图1-1)
图1-1
首先考虑a杆下面的盘子而非杆上最上面的盘子,于是任务变成了:
1、将上面的63个盘子移到b杆上;
2、将a杆上剩下的盘子移到c杆上;
3、将b杆上的全部盘子移到c杆上。
将这个过程继续下去,就是要先完成移动63个盘子、62个盘子、61个盘子....1个盘的工作。
四、算法选择
汉诺塔程序设计算法的实质就是递归递归思想的运用。现将其算法简述如下:
为了更清楚地描述算法,可以定义一个函数hanoi(n,a,b,c)。该函数的功能是:将n个盘子从塔a上借助塔b移动到塔c上。这样移动n个盘子的工作就可以按照以下过程进行:
1) hanoi(n-1,a,c,b);12n将速度调的很慢,当自动运行时,鼠标的一些快速移动也会使画面的演示出问题。 2.自动搬移时若暂停后再保存退出则重新打开后可继续运行;但是在没有暂停的情况下保存退出,在打开后就不正常。
3.在没有暂停的情况下进行设置也会导致程序不正常。
图1-2 流程图 取消起始塔定义,并将塔顶是否自动搬移
退出 开始
是否正在移动
退出
是否点中某个塔
退出
是否已定义起塔上是否有盘
退出 定义当前塔为起始塔,并将塔顶是否起始塔
消息框退出 该塔顶盘是否比欲移动盘大
消息框退出 定义为目标塔,调MovePlate函数,将起始塔顶退出 是
否
是
否
否
是
是 否
退出 否
是 是
否
否 是