漢諾塔
漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
實現漢諾塔的基本思路:
漢諾塔主要是有三個塔座A,B,C,要求將三個大小不同,依小到大編號為1,2.....n的圓盤從A移動到塔座C上,要求
(1):每次只能移動一個圓盤
(2):圓盤可以插到A,B,C中任一塔座上
(3):任何時候不能將一個較大的圓盤壓在較小的圓盤之上
算法分析:
將 N 個圓盤從左邊柱子移動到右邊柱子:
-
[遞歸的]將 N-1 個圓盤從左邊柱子移動到中間柱子。
-
將最大的圓盤從左邊柱子移動到右邊柱子。
-
[遞歸的]將 N-1 個圓盤從中間柱子移動到右邊柱子
算法實現:
def hanoi(n, a, b, c): if n == 1: print(a, '-->', c) else: hanoi(n - 1, a, c, b) print(a, '-->', c) hanoi(n - 1, b, a, c) # 調用 hanoi(5, 'A', 'B', 'C')
運行結果: