題目描述:
與漢諾塔規則一致,現在是要將最優解法的步驟輸出來(我們知道最優解法的步數是2n−
12^n-1
2n−1
)。n代表總的盤子個數,用a,b,c代表三根柱子,數字代表盤子,1是最小的,依次遞增,n是最大。具體格式見樣例輸入輸出。
樣例:
樣例輸入:
樣例輸出:move disk1 from a to c題目分析:move disk2 from a to b
move disk1 from c to b
move disk3 from a to c
move disk1 from b to a
move disk2 from b to c
move disk1 from a to c
對於兩個,我們知道是將1移到b,2移到c,1再從b移到c。
對於三個,見樣例。
其實最優操作的方法是每次將最大的盤子移動到c,其餘的按照原順序移到另一根柱子(為最大的騰開位置)。即現有m塊位於a柱(起始柱),欲移向c柱(目標柱):先將m-1塊移動至b柱(借用柱,空閒可暫放的那個),再將第m塊移向c柱(目標柱)。於是問題來了如何將m-1塊移動至b柱?這不是和原問題類似嗎,只是目標柱變成了b柱,借用柱是c柱,起始柱沒變,物件是m-1而已。這不就是遞迴嘛,解決思路一樣,只是物件有變化。於是完成第一次操作後,此時m塊在c柱,m-1塊在b柱,於是我們要把m-1塊從起始柱b,移向目標柱c,所以先要將m-2塊移向借用柱a。以此類推,方法一致。
附**:
#include#includeusing namespace std;
void findans(int t,char a,char b,char c)//準備移的塊數,起始柱,借用柱,目標柱
}int main()
ps:圖源絡 stringstream 求漢諾塔步數(高精)
洛谷p1760通天之漢諾塔 在你的幫助下,小a成功收集到了寶貴的資料,他終於來到了傳說中連線通天路的通天山。但是這距離通天路仍然有一段距離,但是小a突然發現他沒有地圖!但是幸運的是,他在山腳下發現了乙個寶箱。根據經驗判斷 小a有經驗嗎?地圖應該就在其中!在寶箱上,有三根柱子以及在一根柱子上的n個圓盤...
遞迴演算法之漢諾塔(輸出步驟)
description 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙...
漢諾塔 遞迴
個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...