問題不再多做贅述:
分析: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根木樁。我們每次只能移動乙個盤子,但是不能把較大的...