七层汉诺塔的解法
《Hanoi塔问题》课件

在游戏设计和人工智能领域,Hanoi塔问题可以作为解决游戏策略和决策问题的 模型。例如在围棋、象棋等游戏中,可以利用Hanoi塔问题的解法来设计更强大 的游戏AI。
PART 04
Hanoi塔问题的扩展和变 种
REPORTING
带限制的Hanoi塔问题
总结词
带限制的Hanoi塔问题是指在移动盘 子时,需要满足一些特定的限制条件 。
分治策略解法的优点是能够将问题分 解为更小的子问题,降低问题的复杂 度。但缺点是需要仔细设计子问题的 分解方式和合并方式,以确保能够正 确地解决问题。
PART 03
Hanoi塔问题的应用
REPORTING
在计算机科学中的应用
算法设计
Hanoi塔问题可以作为解决复杂算法问题的模型,例如在解决图论、动态规划 等算法问题时,可以利用Hanoi塔问题的特性来设计更高效的算法。
决。
在Hanoi塔问题中,递归解法的基本思 路是将问题分解为三个子问题:将n个 盘,最后将第n个盘子从
A柱移动到B柱。
递归解法的优点是思路简单明了,易于 理解。但缺点是对于大规模问题,递归 解法的时间复杂度较高,容易造成栈溢
出。
动态规划解法
动态规划解法是一种通过将问题分解为子问题并存储子问题的解来避免重复计算的方法。
数学模型的应用
汉诺塔问题可以通过数学模型进行描述和解决,如使用递归公式或动态规划方法。理解如何将实际问题转化为数 学模型,并运用数学工具进行分析和解决,是数学应用的重要能力。
对解决问题的方法论的启示
解决问题的思维方式
汉诺塔问题提供了一种独特的思维方式,即通过不断将问题分解为更小的子问题来解决。这种思维方 式有助于我们在面对复杂问题时,能够更加清晰地理解和分析问题,从而找到有效的解决方案。
python汉诺塔递归详解(一)

python汉诺塔递归详解(一)Python汉诺塔递归解法引言汉诺塔(Hanoi Tower)是一种数学问题和益智游戏,由法国数学家爱德华·卢卡教授在19世纪初提出。
通过计算机编程解决汉诺塔问题,可以帮助我们更好地理解递归算法在编程中的应用。
问题描述在汉诺塔问题中,有三个柱子和一些圆盘,每个柱子上的圆盘按照从小到大的顺序叠放。
问题的目标是将所有圆盘从一根柱子移动到另一根柱子上,每次只能移动一个圆盘,并且在移动过程中不允许大圆盘放在小圆盘上面。
解法思路我们可以使用递归的方法解决汉诺塔问题。
下面是解决汉诺塔问题的基本步骤:1.将上面n-1个圆盘从A柱移动到B柱。
2.将最大的圆盘从A柱移动到C柱。
3.将B柱上的n-1个圆盘移动到C柱。
通过递归调用这三个步骤,可以将所有的圆盘从A柱移动到C柱。
代码实现以下是使用Python语言实现汉诺塔递归的代码:def hanoi(n, A, B, C):if n == 1:print("Move disk 1 from", A, "to", C) returnhanoi(n-1, A, C, B)print("Move disk", n, "from", A, "to", C) hanoi(n-1, B, A, C)# 测试代码hanoi(3, "A", "B", "C")运行结果运行上述代码,我们可以得到以下输出结果:Move disk 1 from A to CMove disk 2 from A to BMove disk 1 from C to BMove disk 3 from A to CMove disk 1 from B to AMove disk 2 from B to CMove disk 1 from A to C总结通过递归算法,我们可以轻松解决汉诺塔问题。
汉诺塔游戏攻略

3层:第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 4层:第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 5层:第1步: x -移到-> y 第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 第8步: x -移到-> z 第9步: y -移到-> z 第10步: y -移到-> x 第11步: z -移到-> x 第12步: y -移到-> z 第13步: x -移到-> y 第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y 第26步: x -移到-> z 第27步: y -移到-> z 第28步: x -移到-> y 第29步: z -移到-> x 第30步: z -移到-> y 第31步: x -移到-> y 6层:第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 第16步: x -移到-> z 第17步: y -移到-> x 第18步: y -移到-> z 第19步: x -移到-> z 第20步: y -移到-> x 第21步: z -移到-> y 第22步: z -移到-> x 第23步: y -移到-> x 第24步: y -移到-> z 第25步: x -移到-> z 第26步: x -移到-> y 第27步: z -移到-> y 第28步: x -移到-> z 第29步: y -移到-> x 第30步: y -移到-> z 第31步: x -移到-> z第33步: z -移到-> y第34步: z -移到-> x第35步: y -移到-> x第36步: z -移到-> y第37步: x -移到-> z第38步: x -移到-> y第39步: z -移到-> y第40步: z -移到-> x第41步: y -移到-> x第42步: y -移到-> z第43步: x -移到-> z第44步: y -移到-> x第45步: z -移到-> y第46步: z -移到-> x第47步: y -移到-> x第48步: z -移到-> y第49步: x -移到-> z第50步: x -移到-> y第51步: z -移到-> y第52步: x -移到-> z第53步: y -移到-> x第54步: y -移到-> z第55步: x -移到-> z第56步: x -移到-> y第57步: z -移到-> y第58步: z -移到-> x第59步: y -移到-> x第60步: z -移到-> y第61步: x -移到-> z第62步: x -移到-> y第63步: z -移到-> y7层:第1步: x -移到-> y 第2步: x -移到-> z第3步: y -移到-> z第4步: x -移到-> y第5步: z -移到-> x第6步: z -移到-> y第7步: x -移到-> y第8步: x -移到-> z第9步: y -移到-> z第10步: y -移到-> x第11步: z -移到-> x第12步: y -移到-> z第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y 第20步: z -移到-> x 第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y 第26步: x -移到-> z 第27步: y -移到-> z 第28步: x -移到-> y 第29步: z -移到-> x 第30步: z -移到-> y 第31步: x -移到-> y 第32步: x -移到-> z 第33步: y -移到-> z 第34步: y -移到-> x 第35步: z -移到-> x 第36步: y -移到-> z 第37步: x -移到-> y 第38步: x -移到-> z 第39步: y -移到-> z 第40步: y -移到-> x 第41步: z -移到-> x 第42步: z -移到-> y 第43步: x -移到-> y 第44步: z -移到-> x 第45步: y -移到-> z 第46步: y -移到-> x 第47步: z -移到-> x 第48步: y -移到-> z 第49步: x -移到-> y 第50步: x -移到-> z 第51步: y -移到-> z 第52步: x -移到-> y 第53步: z -移到-> x 第54步: z -移到-> y 第55步: x -移到-> y 第56步: x -移到-> z第58步: y -移到-> x 第59步: z -移到-> x 第60步: y -移到-> z 第61步: x -移到-> y 第62步: x -移到-> z 第63步: y -移到-> z 第64步: x -移到-> y 第65步: z -移到-> x 第66步: z -移到-> y 第67步: x -移到-> y 第68步: z -移到-> x 第69步: y -移到-> z 第70步: y -移到-> x 第71步: z -移到-> x 第72步: z -移到-> y 第73步: x -移到-> y 第74步: x -移到-> z 第75步: y -移到-> z 第76步: x -移到-> y 第77步: z -移到-> x 第78步: z -移到-> y 第79步: x -移到-> y 第80步: z -移到-> x 第81步: y -移到-> z 第82步: y -移到-> x 第83步: z -移到-> x 第84步: y -移到-> z 第85步: x -移到-> y 第86步: x -移到-> z 第87步: y -移到-> z 第88步: y -移到-> x 第89步: z -移到-> x 第90步: z -移到-> y 第91步: x -移到-> y 第92步: z -移到-> x 第93步: y -移到-> z 第94步: y -移到-> x 第95步: z -移到-> x 第96步: z -移到-> y 第97步: x -移到-> y 第98步: x -移到-> z 第99步: y -移到-> z 第100步: x -移到-> y第102步: z -移到-> y 第103步: x -移到-> y 第104步: x -移到-> z 第105步: y -移到-> z 第106步: y -移到-> x 第107步: z -移到-> x 第108步: y -移到-> z 第109步: x -移到-> y 第110步: x -移到-> z 第111步: y -移到-> z 第112步: x -移到-> y 第113步: z -移到-> x 第114步: z -移到-> y 第115步: x -移到-> y 第116步: z -移到-> x 第117步: y -移到-> z 第118步: y -移到-> x 第119步: z -移到-> x 第120步: z -移到-> y 第121步: x -移到-> y 第122步: x -移到-> z 第123步: y -移到-> z 第124步: x -移到-> y 第125步: z -移到-> x 第126步: z -移到-> y 第127步: x -移到-> y。
汉诺塔问题求解思路

汉诺塔问题求解思路汉诺塔问题是⼀个经典的问题。
汉诺塔(Hanoi Tower),⼜称河内塔,源于印度⼀个古⽼传说。
⼤梵天创造世界的时候做了三根⾦刚⽯柱⼦,在⼀根柱⼦上从下往上按照⼤⼩顺序摞着64⽚黄⾦圆盘。
⼤梵天命令婆罗门把圆盘从下⾯开始按⼤⼩顺序重新摆放在另⼀根柱⼦上。
并且规定,任何时候,在⼩圆盘上都不能放⼤圆盘,且在三根柱⼦之间⼀次只能移动⼀个圆盘。
问应该如何操作?分析如果是初次接触类似的问题,乍看之下肯定会感觉⽆从下⼿。
要把64个圆盘从a柱⼦移动到c柱⼦上,第⼀步应该怎么做?虽然可以肯定,第⼀步唯⼀的选择是移动a最上⾯的那个圆盘,但是应该将其移到b还是c呢?很难确定。
因为接下来的第⼆步、第三步……直到最后⼀步,看起来都是很难确定的。
能⽴即确定的是最后⼀步:最后⼀步的盘⼦肯定也是a最上⾯那个圆盘,并且是由a或b移动到c——此前已经将63个圆盘移动到了c上。
也许你会说,管他呢,先随便试着移动⼀下好了。
如果你这么做,你会发现,接下来你会⾯临越来越多类似的选择,对每⼀个选择都“试”⼀下的话,你会偏离正确的道路越来越远,直到你发现你接下来⽆法进⾏为⽌。
如果将这个问题的盘⼦数量减为10个或更少,就不会有太⼤的问题了。
但盘⼦数量为64的话,你⼀共需要移动约1800亿亿步(18,446,744,073,709,551,615),才能最终完成整个过程。
这是⼀个天⽂数字,没有⼈能够在有⽣之年通过⼿动的⽅式来完成它。
即使借助于计算机,假设计算机每秒能够移动100万步,那么约需要18万亿秒,即58万年。
将计算机的速度再提⾼1000倍,即每秒10亿步,也需要584年才能够完成。
注:在我的笔记本电脑上,每秒⼤约能够移动6~8百万步。
虽然64个盘⼦超出了⼈⼒和现代计算机的能⼒,但⾄少对于计算机来说,这不是⼀个⽆法完成的任务,因为与我们⼈类不同,计算机的能⼒在不断提⾼。
分解问题⼀股脑地考虑每⼀步如何移动很困难,我们可以换个思路。
汉诺塔问题的详解课件

03 汉诺塔问题的变 种和扩展
多层汉诺塔问题
01
02
03
定义
多层汉诺塔问题是指将多 层的盘子从一个柱子移动 到另一个柱子,同时满足 汉诺塔问题的规则。
难度
随着盘子层数的增加,解 决问题的难度呈指数级增 长。
子从中间柱子移动到目标柱子。
递归解法的优点是思路简单明了,易于 理解。但是,对于较大的n值,递归解 法的时间复杂度较高,容易造成栈溢出
。
分治策略
分治策略是解决汉诺塔问题的另一种方法。它将问题分解为若干个子问题,分别求解这些子 问题,然后将子问题的解合并起来得到原问题的解。
分治策略的基本思路是将汉诺塔问题分解为三个阶段:预处理阶段、递归转移阶段和合并阶 段。预处理阶段将n-1个盘子从起始柱子移动到中间柱子,递归转移阶段将第n个盘子从起 始柱子移动到目标柱子,合并阶段将n-1个盘子从中间柱子移动到目标柱子。
制作汉诺塔问题的动画演示
除了使用Python或数学软件进行可视化演示外,还可以使 用动画制作软件来制作汉诺塔问题的动画演示。这些软件 提供了丰富的动画效果和编辑工具,可以创建生动有趣的 演示。
在动画演示中,可以使用不同的颜色和形状来表示不同的 柱子和盘子。通过添加音效和文字说明,可以增强演示的 视觉效果和互动性。最终的动画演示可以保存为视频文件 ,并在任何支持视频播放的设备上播放。
使用Python的图形库,如matplotlib或tkinter,可以创建汉诺塔的动态演示。 通过在屏幕上绘制柱子和盘子,并模拟移动过程,可以直观地展示汉诺塔问题的 解决方案。
Python代码可以编写一个函数来模拟移动盘子的过程,并在屏幕上实时更新盘 子的位置。通过递归调用该函数,可以逐步展示移动盘子的步骤,直到所有盘子 被成功移动到目标柱子上。
汉诺塔游戏攻略

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 3层:第1步: x -移到-> y第2步: x -移到-> z第3步: y -移到-> z第4步: x -移到-> y第5步: z -移到-> x第6步: z -移到-> y第7步: x -移到-> y4层:第1步: x -移到-> z第2步: x -移到-> y第3步: z -移到-> y第4步: x -移到-> z第5步: y -移到-> x第6步: y -移到-> z第7步: x -移到-> z第8步: x -移到-> y第9步: z -移到-> y第10步: z -移到-> x第11步: y -移到-> x第12步: z -移到-> y第13步: x -移到-> z第14步: x -移到-> y第15步: z -移到-> y5层:第2步: x -移到-> z 第3步: y -移到-> z 第4步: x -移到-> y 第5步: z -移到-> x 第6步: z -移到-> y 第7步: x -移到-> y 第8步: x -移到-> z 第9步: y -移到-> z 第10步: y -移到-> x 第11步: z -移到-> x 第12步: y -移到-> z 第13步: x -移到-> y 第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y 第20步: z -移到-> x 第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y第27步: y -移到-> z 第28步: x -移到-> y 第29步: z -移到-> x 第30步: z -移到-> y 第31步: x -移到-> y 6层:第1步: x -移到-> z 第2步: x -移到-> y 第3步: z -移到-> y 第4步: x -移到-> z 第5步: y -移到-> x 第6步: y -移到-> z 第7步: x -移到-> z 第8步: x -移到-> y 第9步: z -移到-> y 第10步: z -移到-> x 第11步: y -移到-> x 第12步: z -移到-> y 第13步: x -移到-> z 第14步: x -移到-> y 第15步: z -移到-> y 第16步: x -移到-> z 第17步: y -移到-> x 第18步: y -移到-> z第20步: y -移到-> x 第21步: z -移到-> y 第22步: z -移到-> x 第23步: y -移到-> x 第24步: y -移到-> z 第25步: x -移到-> z 第26步: x -移到-> y 第27步: z -移到-> y 第28步: x -移到-> z 第29步: y -移到-> x 第30步: y -移到-> z 第31步: x -移到-> z 第32步: x -移到-> y 第33步: z -移到-> y 第34步: z -移到-> x 第35步: y -移到-> x 第36步: z -移到-> y 第37步: x -移到-> z 第38步: x -移到-> y 第39步: z -移到-> y 第40步: z -移到-> x 第41步: y -移到-> x 第42步: y -移到-> z 第43步: x -移到-> z第45步: z -移到-> y第46步: z -移到-> x第47步: y -移到-> x第48步: z -移到-> y第49步: x -移到-> z第50步: x -移到-> y第51步: z -移到-> y第52步: x -移到-> z第53步: y -移到-> x第54步: y -移到-> z第55步: x -移到-> z第56步: x -移到-> y第57步: z -移到-> y第58步: z -移到-> x第59步: y -移到-> x第60步: z -移到-> y第61步: x -移到-> z第62步: x -移到-> y第63步: z -移到-> y7层:第1步: x -移到-> y 第2步: x -移到-> z第3步: y -移到-> z第4步: x -移到-> y第5步: z -移到-> x第7步: x -移到-> y 第8步: x -移到-> z 第9步: y -移到-> z 第10步: y -移到-> x 第11步: z -移到-> x 第12步: y -移到-> z 第13步: x -移到-> y 第14步: x -移到-> z 第15步: y -移到-> z 第16步: x -移到-> y 第17步: z -移到-> x 第18步: z -移到-> y 第19步: x -移到-> y 第20步: z -移到-> x 第21步: y -移到-> z 第22步: y -移到-> x 第23步: z -移到-> x 第24步: z -移到-> y 第25步: x -移到-> y 第26步: x -移到-> z 第27步: y -移到-> z 第28步: x -移到-> y 第29步: z -移到-> x 第30步: z -移到-> y第32步: x -移到-> z 第33步: y -移到-> z 第34步: y -移到-> x 第35步: z -移到-> x 第36步: y -移到-> z 第37步: x -移到-> y 第38步: x -移到-> z 第39步: y -移到-> z 第40步: y -移到-> x 第41步: z -移到-> x 第42步: z -移到-> y 第43步: x -移到-> y 第44步: z -移到-> x 第45步: y -移到-> z 第46步: y -移到-> x 第47步: z -移到-> x 第48步: y -移到-> z 第49步: x -移到-> y 第50步: x -移到-> z 第51步: y -移到-> z 第52步: x -移到-> y 第53步: z -移到-> x 第54步: z -移到-> y 第55步: x -移到-> y第57步: y -移到-> z 第58步: y -移到-> x 第59步: z -移到-> x 第60步: y -移到-> z 第61步: x -移到-> y 第62步: x -移到-> z 第63步: y -移到-> z 第64步: x -移到-> y 第65步: z -移到-> x 第66步: z -移到-> y 第67步: x -移到-> y 第68步: z -移到-> x 第69步: y -移到-> z 第70步: y -移到-> x 第71步: z -移到-> x 第72步: z -移到-> y 第73步: x -移到-> y 第74步: x -移到-> z 第75步: y -移到-> z 第76步: x -移到-> y 第77步: z -移到-> x 第78步: z -移到-> y 第79步: x -移到-> y 第80步: z -移到-> x第82步: y -移到-> x 第83步: z -移到-> x 第84步: y -移到-> z 第85步: x -移到-> y 第86步: x -移到-> z 第87步: y -移到-> z 第88步: y -移到-> x 第89步: z -移到-> x 第90步: z -移到-> y 第91步: x -移到-> y 第92步: z -移到-> x 第93步: y -移到-> z 第94步: y -移到-> x 第95步: z -移到-> x 第96步: z -移到-> y 第97步: x -移到-> y 第98步: x -移到-> z 第99步: y -移到-> z 第100步: x -移到-> y 第101步: z -移到-> x 第102步: z -移到-> y 第103步: x -移到-> y 第104步: x -移到-> z 第105步: y -移到-> z第107步: z -移到-> x 第108步: y -移到-> z 第109步: x -移到-> y 第110步: x -移到-> z 第111步: y -移到-> z 第112步: x -移到-> y 第113步: z -移到-> x 第114步: z -移到-> y 第115步: x -移到-> y 第116步: z -移到-> x 第117步: y -移到-> z 第118步: y -移到-> x 第119步: z -移到-> x 第120步: z -移到-> y 第121步: x -移到-> y 第122步: x -移到-> z 第123步: y -移到-> z 第124步: x -移到-> y 第125步: z -移到-> x 第126步: z -移到-> y 第127步: x -移到-> y。
汉诺塔算法

汉诺塔算法汉诺塔算法的递归实现C++源代码#include <fstream>#include <iostream>using namespace std;ofstream fout(“out.txt”);void Move(int n,char x,char y){fout<<“把”<<n<<“号从”<<x<<“挪动到”<<y<<endl;}void Hannoi(int n,char a,char b,char c){if(n==1)Move(1,a,c);else{Hannoi(n-1,a,c,b);Move(n,a,c);Hannoi(n-1,b,a,c);}}int main(){fout<<“以下是7层汉诺塔的解法:”<<endl;Hannoi(7,…a‟,…b‟,…c‟);fout.close();cout<<“输出完毕!”<<endl;return 0;}●汉诺塔算法的递归实现C源代码:#include<stdio.h>void hanoi(int n,char A,char B,char C){if(n==1){printf(“Move disk %d from %c to %c\n”,n,A,C); }else{hanoi(n-1,A,C,B);printf(“Move disk %d from %c to %c\n”,n,A,C); hanoi(n-1,B,A,C);}}main(){int n;printf(“请输入数字n以解决n阶汉诺塔问题:\n”);scanf(“%d”,&n);hanoi(n,…A‟,…B‟,…C‟);}●汉诺塔算法的非递归实现C++源代码#include <iostream>using namespace std;//圆盘的个数最多为64const int MAX = 64;//用来表示每根柱子的信息struct st{int s[MAX]; //柱子上的圆盘存储情况int top; //栈顶,用来最上面的圆盘char name; //柱子的名字,可以是A,B,C中的一个int Top()//取栈顶元素{return s[top];}int Pop()//出栈{return s[top–];}void Push(int x)//入栈{s[++top] = x;}} ;long Pow(int x, int y); //计算x^yvoid Creat(st ta[], int n); //给结构数组设置初值void Hannuota(st ta[], long max); //移动汉诺塔的主要函数int main(void){int n;cin >> n; //输入圆盘的个数st ta[3]; //三根柱子的信息用结构数组存储Creat(ta, n); //给结构数组设置初值long max = Pow(2, n) - 1;//动的次数应等于2^n - 1 Hannuota(ta, max);//移动汉诺塔的主要函数system(“pause”);return 0;}void Creat(st ta[], int n){ta[0].name = …A‟;ta[0].top = n-1;//把所有的圆盘按从大到小的顺序放在柱子A上for (int i=0; i<n; i++)ta[0].s[i] = n - i;//柱子B,C上开始没有没有圆盘ta[1].top = ta[2].top = 0;for (int i=0; i<n; i++)ta[1].s[i] = ta[2].s[i] = 0;//若n为偶数,按顺时针方向依次摆放 A B Cif (n%2 == 0){ta[1].name = …B‟;ta[2].name = …C‟;}else//若n为奇数,按顺时针方向依次摆放 A C B{ta[1].name = …C‟;ta[2].name = …B‟;}}long Pow(int x, int y){long sum = 1;for (int i=0; i<y; i++)sum *= x;return sum;}void Hannuota(st ta[], long max){int k = 0; //累计移动的次数int i = 0;int ch;while (k < max){//按顺时针方向把圆盘1从现在的柱子移动到下一根柱子ch = ta[i%3].Pop();ta[(i+1)%3].Push(ch);cout << ++k << “: “ <<“Move disk “ << ch << ” from “ << ta[i%3].name <<” to “ << ta[(i+1)%3].name << endl;i++;//把另外两根柱子上可以移动的圆盘移动到新的柱子上if (k < max){//把非空柱子上的圆盘移动到空柱子上,当两根柱子都为空时,移动较小的圆盘if (ta[(i+1)%3].Top() == 0 ||ta[(i-1)%3].Top() > 0 &&ta[(i+1)%3].Top() > ta[(i-1)%3].Top()){ch = ta[(i-1)%3].Pop();ta[(i+1)%3].Push(ch);cout << ++k << “: “ << “Move disk “<< ch << ” from “ << ta[(i-1)%3].name<< ” to “ << ta[(i+1)%3].name << endl;}else{ch = ta[(i+1)%3].Pop();ta[(i-1)%3].Push(ch);cout << ++k << “: “ << “Move disk “<< ch << ” from “ << ta[(i+1)%3].name<< ” to “ << ta[(i-1)%3].name << endl;}}}}。
七层汉诺塔的解法

七层汉诺塔的解法1、把1号从a挪动到c2、把2号从a挪动到b3、把1号从c挪动到b4、把3号从a挪动到c5、把1号从b挪动到a6、把2号从b挪动到c7、把1号从a挪动到c8、把4号从a挪动到b9、把1号从c挪动到b 10、把2号从c挪动到a 11、把1号从b挪动到a 12、把3号从c挪动到b 13、把1号从a挪动到c 14、把2号从a挪动到b 15、把1号从c挪动到b 16、把5号从a挪动到c 17、把1号从b挪动到a 18、把2号从b挪动到c 19、把1号从a挪动到c 20、把3号从b挪动到a 21、把1号从c挪动到b 22、把2号从c挪动到a 23、把1号从b挪动到a 24、把4号从b挪动到c 25、把1号从a挪动到c 26、把2号从a挪动到b 27、把1号从c挪动到b 28、把3号从a挪动到c 29、把1号从b挪动到a 30、把2号从b挪动到c 31、把1号从a挪动到c 32、把6号从a挪动到b 33、把1号从c挪动到b 34、把2号从c挪动到a 35、把1号从b挪动到a 36、把3号从c挪动到b 37、把1号从a挪动到c 38、把2号从a挪动到b 39、把1号从c挪动到b 40、把4号从c挪动到a 41、把1号从b挪动到a 42、把2号从b挪动到c 43、把1号从a挪动到c 44、把3号从b挪动到a 45、把1号从c挪动到b 46、把2号从c挪动到a 47、把1号从b挪动到a 48、把5号从c挪动到b 49、把1号从a挪动到c 50、把2号从a挪动到b 51、把1号从c挪动到b 52、把3号从a挪动到c 53、把1号从b挪动到a 54、把2号从b挪动到c 55、把1号从a挪动到c 56、把4号从a挪动到b 57、把1号从c挪动到b 58、把2号从c挪动到a 59、把1号从b挪动到a 60、把3号从c挪动到b 61、把1号从a挪动到c 62、把2号从a挪动到b63、把1号从c挪动到b 64、把7号从a挪动到c65、把1号从b挪动到a 66、把2号从b挪动到c67、把1号从a挪动到c 68、把3号从b挪动到a69、把1号从c挪动到b 70、把2号从c挪动到a71、把1号从b挪动到a 72、把4号从b挪动到c73、把1号从a挪动到c 74、把2号从a挪动到b75、把1号从c挪动到b 76、把3号从a挪动到c77、把1号从b挪动到a 78、把2号从b挪动到c79、把1号从a挪动到c 80、把5号从b挪动到a81、把1号从c挪动到b 82、把2号从c挪动到a83、把1号从b挪动到a 84、把3号从c挪动到b85、把1号从a挪动到c 86、把2号从a挪动到b87、把1号从c挪动到b 88、把4号从c挪动到a89、把1号从b挪动到a 90、把2号从b挪动到c91、把1号从a挪动到c 92、把3号从b挪动到a93、把1号从c挪动到b 94、把2号从c挪动到a95、把1号从b挪动到a 96、把6号从b挪动到c97、把1号从a挪动到c 98、把2号从a挪动到b99、把1号从c挪动到b 100、把3号从a挪动到c101、把1号从b挪动到a 102、把2号从b挪动到c103、把1号从a挪动到c 104、把4号从a挪动到b105、把1号从c挪动到b 106、把2号从c挪动到a107、把1号从b挪动到a 108、把3号从c挪动到b109、把1号从a挪动到c 110、把2号从a挪动到b111、把1号从c挪动到b 112、把5号从a挪动到c113、把1号从b挪动到a 114、把2号从b挪动到c115、把1号从a挪动到c 116、把3号从b挪动到a117、把1号从c挪动到b 118、把2号从c挪动到a119、把1号从b挪动到a 120、把4号从b挪动到c121、把1号从a挪动到c 122、把2号从a挪动到b123、把1号从c挪动到b 124、把3号从a挪动到c125、把1号从b挪动到a 126、把2号从b挪动到c127、把1号从a挪动到c。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
七层汉诺塔的解法
1、把1号从a挪动到c
2、把2号从a挪动到b
3、把1号从c挪动到b
4、把3号从a挪动到c
5、把1号从b挪动到a
6、把2号从b挪动到c
7、把1号从a挪动到c
8、把4号从a挪动到b
9、把1号从c挪动到b 10、把2号从c挪动到a 11、把1号从b挪动到a 12、把3号从c挪动到b 13、把1号从a挪动到c 14、把2号从a挪动到b 15、把1号从c挪动到b 16、把5号从a挪动到c 17、把1号从b挪动到a 18、把2号从b挪动到c 19、把1号从a挪动到c 20、把3号从b挪动到a 21、把1号从c挪动到b 22、把2号从c挪动到a 23、把1号从b挪动到a 24、把4号从b挪动到c 25、把1号从a挪动到c 26、把2号从a挪动到b 27、把1号从c挪动到b 28、把3号从a挪动到c 29、把1号从b挪动到a 30、把2号从b挪动到c 31、把1号从a挪动到c 32、把6号从a挪动到b 33、把1号从c挪动到b 34、把2号从c挪动到a 35、把1号从b挪动到a 36、把3号从c挪动到b 37、把1号从a挪动到c 38、把2号从a挪动到b 39、把1号从c挪动到b 40、把4号从c挪动到a 41、把1号从b挪动到a 42、把2号从b挪动到c 43、把1号从a挪动到c 44、把3号从b挪动到a 45、把1号从c挪动到b 46、把2号从c挪动到a 47、把1号从b挪动到a 48、把5号从c挪动到b 49、把1号从a挪动到c 50、把2号从a挪动到b 51、把1号从c挪动到b 52、把3号从a挪动到c 53、把1号从b挪动到a 54、把2号从b挪动到c 55、把1号从a挪动到c 56、把4号从a挪动到b 57、把1号从c挪动到b 58、把2号从c挪动到a 59、把1号从b挪动到a 60、把3号从c挪动到b 61、把1号从a挪动到c 62、把2号从a挪动到b
63、把1号从c挪动到b 64、把7号从a挪动到c 65、把1号从b挪动到a 66、把2号从b挪动到c 67、把1号从a挪动到c 68、把3号从b挪动到a 69、把1号从c挪动到b 70、把2号从c挪动到a 71、把1号从b挪动到a 72、把4号从b挪动到c 73、把1号从a挪动到c 74、把2号从a挪动到b 75、把1号从c挪动到b 76、把3号从a挪动到c 77、把1号从b挪动到a 78、把2号从b挪动到c 79、把1号从a挪动到c 80、把5号从b挪动到a 81、把1号从c挪动到b 82、把2号从c挪动到a 83、把1号从b挪动到a 84、把3号从c挪动到b 85、把1号从a挪动到c 86、把2号从a挪动到b 87、把1号从c挪动到b 88、把4号从c挪动到a 89、把1号从b挪动到a 90、把2号从b挪动到c 91、把1号从a挪动到c 92、把3号从b挪动到a 93、把1号从c挪动到b 94、把2号从c挪动到a 95、把1号从b挪动到a 96、把6号从b挪动到c 97、把1号从a挪动到c 98、把2号从a挪动到b 99、把1号从c挪动到b 100、把3号从a挪动到c 101、把1号从b挪动到a 102、把2号从b挪动到c 103、把1号从a挪动到c 104、把4号从a挪动到b 105、把1号从c挪动到b 106、把2号从c挪动到a 107、把1号从b挪动到a 108、把3号从c挪动到b 109、把1号从a挪动到c 110、把2号从a挪动到b 111、把1号从c挪动到b 112、把5号从a挪动到c 113、把1号从b挪动到a 114、把2号从b挪动到c 115、把1号从a挪动到c 116、把3号从b挪动到a 117、把1号从c挪动到b 118、把2号从c挪动到a 119、把1号从b挪动到a 120、把4号从b挪动到c 121、把1号从a挪动到c 122、把2号从a挪动到b 123、把1号从c挪动到b 124、把3号从a挪动到c 125、把1号从b挪动到a 126、把2号从b挪动到c 127、把1号从a挪动到c。