汉诺塔简介
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
程序要实现的功能
设置三个绘图区,表示三桌子(程序中用桌子table表示汉诺塔中的柱子),在每个绘图区中放置盘子(用椭圆代替),可以通过程序设置汉诺塔的层数,利用鼠标拖动的方式进行盘子的移动,对非法操作(如大盘放在小盘之上或者移动不存在的圆盘)进行报错并终止运行,移动完成后进行提示,并结束运行。可以对移动中的相关属性进行设置。
柱子和圆盘的数据结构实现
每一个圆盘用一个结构体表示,结构体中的成员变量为盘子水平方向上与边沿的距离(盘子从下到上不断变小)、盘子底部的坐标。代码如下:
struct element
{
int pan_w; //盘子水平方向上与边沿的距离
int pan_bottom; //盘子底部的位置
};
每个table用一个类表示,类成员包括table的名称(A,B,C)、table上盘子信息(用vector对盘子信息进行管理)、绘图区域和每个盘子的高度(汉诺塔的层数不一样,盘子的平均厚度就不一样)。成员函数有清除圆盘和绘图。代码如下:
class hannuo //这个类用于记录每个table上的圆盘信息并在相应的位置绘图
{
public:
hannuo(void);
~hannuo(void);
public:
void draw(); //在指定的位置绘制圆盘
void clear(); //清除该柱子上的所有数据
publi