2.6 汉诺塔问题
写出解5个环的汉诺塔问题的移动序列
代码
print('请输入汉诺塔的层数(为运算与展示考虑请尽量不要大于5)')
N = int(input())
global A, B, C, step
A = []
B = []
C = []
step = 0
for i in range(N):
A.append(i)
A.reverse()
def pop(stack): # 出栈操作。pop返回列表stack中的最后一个元素,并从原列表中删除该元素
node = len(stack)
if (node == 0):
print('栈为空') # 若栈中无元素,则报告栈为空的信息
return
else:
pop = stack[node - 1]
del stack[node - 1]
return pop
def push(element, stack): # 入栈操作。element为压入栈的元素,stack为栈,类型为列表,函数无返回值
stack.append(element)
return
def move(stack1, stack2): # 汉诺塔的一次操作,将stack1的栈顶元素放至stack的栈顶
if(len(stack1) == 0):
return
temp = pop(stack1)
push(temp, stack2)
return
def tower(s1, s2, s3, N=-1): # 汉诺塔算法,借助s2,将s1的N层移动到s3
global step
if(N == -1):
N = len(s1)
if(N == 0):
return<