汉诺塔程序设计报告

  • 格式: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);12n将速度调的很慢,当自动运行时,鼠标的一些快速移动也会使画面的演示出问题。 2.自动搬移时若暂停后再保存退出则重新打开后可继续运行;但是在没有暂停的情况下保存退出,在打开后就不正常。

3.在没有暂停的情况下进行设置也会导致程序不正常。

图1-2 流程图 取消起始塔定义,并将塔顶是否自动搬移

退出 开始

是否正在移动

退出

是否点中某个塔

退出

是否已定义起塔上是否有盘

退出 定义当前塔为起始塔,并将塔顶是否起始塔

消息框退出 该塔顶盘是否比欲移动盘大

消息框退出 定义为目标塔,调MovePlate函数,将起始塔顶退出 是

是 否

退出 否

是 是

否 是