【問題】
給定乙個整數n,代表漢諾塔遊戲中從小到大放置的n個圓盤,假設開始時所有的圓盤都放在左邊的柱子上,想按照漢諾塔遊戲的要求把所有的圓盤都移到右邊的柱子上,實現函式列印最優移動軌跡。
【舉例】
n = 2時,列印:
move from left to mid
move from left to right
move from mid to right
【基本思路】
假設有left柱子,mid柱子和right柱子,都在left柱子的圓盤1~i完全移動到right,最優的過程為:
將圓盤1~i-1從left移動到mid
將圓盤i從left移動到right
將圓盤1~i-1從mid移動到right
如果盤子只有乙個,直接從left移動到right即可
下面是使用python3.5實現的**
#漢諾塔問題
defhanoi
(n):
deffunc
(n, left, mid, right):
if n == 1:
print("move from " + left + " to " + right)
else:
func(n-1, left, right, mid)
func(1, left, mid, right)
func(n-1, mid, left, right)
if n < 1:
return
return func(n, "left", "mid", "right")
漢諾塔問題(遞迴)
題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...
漢諾塔問題(遞迴)
問題 漢諾塔問題 解法 遞迴求解 思路 先把n 1從a移動b 在把第n個從a移到c 使用遞迴使得 變得簡單 複雜度 2的n次方 1 includeint step 1 void hanoi int level,char a,char b,char c 1 當盤子數大於1時,先把n 1個從a借助c移動...
漢諾塔問題(遞迴)
漢諾塔 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,有三根柱子。印度教的主神梵天在創造世界的時候,在其中一根柱子上從下到上地穿好了由大到小的64片金盤,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金盤 一次只移動一片,不管在哪根柱子上,小片必須在...