1 6動態規劃之經典遞迴 漢諾塔

2021-10-22 04:26:03 字數 600 閱讀 7415

問題不再多做贅述:

分析:1)以動態規劃的思維分析:

將n個盤子從左移到右

①首先考慮怎樣將第n個盤子移到右邊去,

②分為三步,1.將上面的n-1移到中間,2.將n移到右邊,3.將n-1移到右邊。如何以動態規劃的思維將這個推導出這最後一步前面的的移動方式。

③此時n已經移動完成,那麼我們去移動第n-1個,同樣是上面的三步,只是現在的中間柱子變為

此時考慮如何將上面的n-1移動,1.將n-2移到中間,(此時n-1原在柱子已經從左變為中,而我們目標柱為右,所以中轉柱為 左柱(薩斯給!!)),2.將第n-1從「左柱」移動到右柱,3.將n-2從中柱移動到右柱。

由上面的遞迴得出所有的移動狀態。

**實現:

public

void

main

(int n)

}//移動過程

public

void

ltor

(int n, string left,string,mid,string,right)

else

}//該方法為遞迴呼叫實現,因為函式棧的關係,有額外空間複雜度n。

經典遞迴漢諾塔

演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a塔上有3個盤子時,先將a塔上編號1至2的盤子 共2個 移動到b塔上 需借助c塔 然後將a...

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

問題 給定乙個整數n,代表漢諾塔遊戲中從小到大放置的n個圓盤,假設開始時所有的圓盤都放在左邊的柱子上,想按照漢諾塔遊戲的要求把所有的圓盤都移到右邊的柱子上,實現函式列印最優移動軌跡。舉例 n 2時,列印 move from left to mid move from left to right mo...

經典遞迴題 漢諾塔

漢諾塔遊戲 在這個遊戲中,我們 或者是以為神話中的祭司 有n個不用大小的盤 子和3根木樁。一開始,所有的盤子都按照大小順序套在第1根木樁上,最大的盤子 在底部,最小的盤子在頂部。我們的目的是把所有的盤子都移到第3根木樁上去,在 必要的時候可以借助第2根木樁。我們每次只能移動乙個盤子,但是不能把較大的...