算法導論·第六集:漢諾塔問題(Python版)

"""
漢諾塔問題
解法:
若柱子標爲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
"""

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章