问题描述
据说古代有一个梵塔,塔内有三个底座A,B,C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子。在移动盘子的过程中可以利用B座,但任何时刻3个座上的盘子都必须始终保持大盘在下、小盘在上的顺序。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C即可。编写函数,接收一个表示盘子数量的参数和分别表示源、目标、临时底座的参数,然后输出详细移动步骤和每次移动后三个底座上的盘子分布情况
解题思想:
解题思路:x y z分别代表起始柱子,辅助柱子,和目标柱子。
1.如果 n= 1 ,则从 x 上移动唯一的圆盘到 z
2.如果 n 不为 1,则分为三步:
①解 n - 1 个圆盘的汉诺塔(将 x 上的 1 --- n-1 号圆盘移动到 y)
②从 x 上移动 N 号圆盘到 z
③解 n- 1 个圆盘的汉诺塔(将 y 上的 1 --- n-1 号圆盘移动到 z
def Hanoi(num,start,tem,goal):
'''
汉诺塔游戏
'''
if(num==1):
print(start+' ---> '+goal)
else:
Hanoi(num-1,start,goal,tem)
Hanoi(1,start,tem,goal)
Hanoi(num-1,tem,start,goal)
num=int(input("请输入盘子的数量:"))
start=input("请输入刚开始放盘子的柱子名称:")
tem=input("请输入辅助柱子的名称:")
goal=input("请输入目标柱子的名称:")
Hanoi(num,start,tem,goal)