求解汉诺塔问题
问题描述:
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个在三个柱子间移动,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,最后使得n个圆盘也按金字塔状叠放到C柱子上。请问当n取不同的值时,圆盘的移动方法?
下面展示代码。
def move(id, ori, to):
#步骤打印函数,展示具体移动过程
global step
print("第{}步: 将第{}块从{}移至{}".format(step, id, ori, to))
step += 1
def hanoi(n, x, y, z):
#解决汉诺塔问题
if n == 0:
return
hanoi(n - 1, x, z, y);
move(n, x, z);
hanoi(n - 1, y, x, z);
#调用函数
print("将圆盘从上到下顺序编号")
n=int(input("当圆盘的数量为"))
print("完成移动的步骤为:")
step = 1
hanoi(n, 'A', 'B', 'C', )
运行结果