遞迴與動態規劃 漢諾塔問題

2021-08-06 04:02:51 字數 874 閱讀 8545

【問題】

給定乙個整數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片金盤,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金盤 一次只移動一片,不管在哪根柱子上,小片必須在...