汉诺塔问题简述:将塔A上的n个大小不一的盘子借由塔B全部移动到塔C上,且在过程中不能将大盘子放在小盘子上。
目录
汉诺塔问题虽然是经典的用递归方法求解的一个问题,但是对于一个看见递归就脑阔疼的人来说,还是想走走其他的路,因此我选择使用非递归来解决这个问题,具体如下:
算法:
不要问为什么可以这样做,问就是有一个美国学者研究表明
具体效果:
PS:千万别把n设置的过大,输出不完的,因为要2^n-1次移动才能完成任务,当n=10的时候就已经要进行1023次移动了。
详细代码如下:
SeqStack.cpp文件
主要任务:定义一个顺序栈,并且稍微修改其getTop()函数(与数据结构教材中定义的get函数一点点不同),设置当top指针指向-1时,调用getTop()函数则会返回999,避免塔已经空了还在移动空气到另外一个塔上。在后面的函数时会用到。
const int StackSize = 100; //设置储存数组的大小为100
template <class DataType>
class SeqStack
{
public:
SeqStack(); //初始化一个空栈,存储数组中什么都没有,令top=-1
~SeqSt