规则:
每次只移动一个盘子
移动盘子的过程中,小的盘子一定在大的盘子之上
原柱子为A,目标柱子为B,辅助柱子为C,一共n个盘片,按大小排序为(1,2,3……n-1,n)
如果将n个盘片从A柱移到B柱: 则n盘片一定在其他n-1个盘片之前进入B柱,所以要先把n-1个盘片从A都移到C柱;
把n-1个盘片从A都移到C柱:n-1盘片一定在其他n-2个盘片之前进入C柱,所以要先把n-2个盘片移到B柱
1、将n盘片上的n-1个盘片从A移到C hanoi(n-1,S="A",T="C",H="B")
2、将n盘片从A移到B:move(S="A",T="B")
3、将n-1个盘片从C移到B hanoi(n-1,S="C",T="B",H="A")
def hani(n,source,target,help):
if n==1:
move(source,target)
else:
hani(n-1,source,help,target)
move(source,target)
hani(n-1,help,target,source)
def move(source,target):
ch=source[0].pop()
print("从"+source[1]+"移到"+target[1])
target[0].append(ch)
if __name__=="__main__":
A=[[4,3,2,1],"A"]
B=[[],"B"]
C=[[],"C"]
hani(len(A[0]),A,B,C)
print(A)
print(B)
print(C)