又稱:雙重漢諾塔問題
雙重河內塔包含 2n 個圓盤,它們有 n 種不同的尺寸,每一種尺寸的圓盤有兩個。如通常那樣,要求每次只能移動乙個圓盤,且不能把較大的圓盤放在較小的圓盤上面。
a 如果相同尺寸的圓盤是相互不可區分的,要把乙個雙重塔從一根樁柱移動到另一根樁柱需要移動多少次?所以隱藏含義就是:移動的過程中,同一大小型號的盤子的上下次序無所謂對於這類遞迴的題目,我們應該先找規律,然後再推出遞迴式,寫出**
ps:這邊我們要寫的程式是,輸出每乙個步驟,例如將幾號盤從幾號柱子移動到幾號柱子n = 1 時,執行以下演算法:
第 n(上) 圓盤從 a 移到 c,需 1 步;
第 n(下) 圓盤從 a 移到 b,需 1 步;
第 n(上) 圓盤從 c 移到 b,需 1 步。
我們將圓盤從上到下依次按照1~2n進行編號
我們中間的輸出步驟過程暫時不考慮2k-1和2k的差別
先簡化難度,將2k-1和2k看成一樣的
(但是最後上下順序還是原來的,最後總步數不影響,只是簡化中間輸出過程)輸出中間步驟時統一輸出"k號型盤子"
第三篇文章中會講到區別2k-1與2k的做法
因為順序要和初始的一樣
第2n號圓盤應該,被放在第c柱的最低端
然後再放上2n-1號盤子
最後再將1~(2n-2)號盤子全部移到c柱上
但是我們怎麼確定,移動1~(2n-2)號盤子就是順序的呢?
因為執行一次\(a_\)操作後,只有最下面兩個盤子的順序會互換
因為\(a_n\)中需要執行兩次\(a_\)操作
所以執行兩次之後就回到了原來的順序
具體證明會在第三篇中講到
1.第 1~n-1 圓盤從 a 移到 b,需 \(a_\) 步;
2.第 n(上) 圓盤從 a 移到 c,需 1 步;
3.第 1~n-1 圓盤從 b 移到 c,需 \(a_\) 步;
4.第 n(下) 圓盤從 a 移到 b,需 1 步;
5.第 1~n-1 圓盤從 c 移到 a,需 \(a_\) 步;
6.第 n(上) 圓盤從 c 移到 b,需 1 步;
7.第 1~n-1 圓盤從 a 移到 b,需 \(a_\) 步。
*/根據遞迴式,我們可以得出
我們設最終完成2n個圓盤的移動所需要的總步數為\(b_n\)
第一篇文章中,已知問題a對應的\(a_n=2^-2\)
故\(\begin
&b_n=a_+1+a_+1+a_+1+a_\\
&=4\times a_+3\\
&=4\times (2^-2)+3\\
&=2^+5\\
\end\)
雙重河內塔I
又稱 雙重漢諾塔問題 雙重河內塔包含 2n 個圓盤,它們有 n 種不同的尺寸,每一種尺寸的圓盤有兩個。如通常那樣,要求每次只能移動乙個圓盤,且不能把較大的圓盤放在較小的圓盤上面。a 如果相同尺寸的圓盤是相互不可區分的,要把乙個雙重塔從一根樁柱移動到另一根樁柱需要移動多少次?本文章針對a問題,後面兩篇...
河內塔問題
首先關於這個問題網上有兩種 答案都相同 第一種 include includeusing namespace std int towers int size,char f,char t,char s voidhannuota intn,chara,charb,charc 自定義hannuota函式,...
河內塔數學題
背景資料 漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤...