算法导论·第六集:汉诺塔问题(Python版)

版权声明:本文为博主原创文章,未经博主允许不得转载。若有任何问题,请联系QQ:575925154(加好友时,请备注:CSDN) https://blog.csdn.net/Miracle0_0/article/details/82694240
"""
汉诺塔问题
解法:
若柱子标为A\B\C,要求从A搬到C。
1、如果只有一个盘子时,将它直接搬到C。
2、如果有两个盘子时,将B作为辅助柱子。即A->B,A->C,B->C。
3、若有n个盘子时,则移动所需次数为(2^n)-1。
比如,当盘子为64个时,需要移动2^64-1次。假设每秒移动一次,大约需要5850亿年。
"""
def towers_of_hanoi(n,A,B,C):
    if n == 1:
        print("Move sheet",n,"from",A,"to",C)
    else:
        towers_of_hanoi(n-1,A,C,B)
        print("Move sheet",n,"from",A,"to",C)
        towers_of_hanoi(n-1,B,A,C)

if __name__ == '__main__':
    towers_of_hanoi(5,'A','B','C')

"""
运行结果:
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 3 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
Move sheet 4 from A to B
Move sheet 1 from C to B
Move sheet 2 from C to A
Move sheet 1 from B to A
Move sheet 3 from C to B
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 5 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
Move sheet 3 from B to A
Move sheet 1 from C to B
Move sheet 2 from C to A
Move sheet 1 from B to A
Move sheet 4 from B to C
Move sheet 1 from A to C
Move sheet 2 from A to B
Move sheet 1 from C to B
Move sheet 3 from A to C
Move sheet 1 from B to A
Move sheet 2 from B to C
Move sheet 1 from A to C
"""

 

猜你喜欢

转载自blog.csdn.net/Miracle0_0/article/details/82694240