三根柱子,其中一根柱子從上到下依次擺放著從小到大的圓盤:
- 每次只能移動乙個圓盤
- 並且大圓盤不能在小圓盤之上
- 需要把這個柱子上的圓盤全部移動到另一根柱子上
問題抽象為,把a柱子上的n個圓盤按照順序擺放到柱子c上:
可以吧解決步驟抽象成:
1. 將n-1個圓盤從a移動到b
2. 把第n個圓盤從a移動到c
3. 把n-1個圓盤從b移動到c
//n個圈從left移動到right
void hannota(int n,char left,char
right,char
mid)
}
在原有規則的基礎上,規定:
- 不能把圓盤從a直接移動到c
- 也不能把圓盤從c直接移動到a
此時問題解決步驟為:
1. 將n-1個圓盤從a移動到c (這裡是乙個抽象概念,並不是直接移動)
2. 把第n個圓盤從a移動到b
3. 將n-1個圓盤從c移動到a
4. 把第n個圓盤從b移動到c
5. 將n-1個圓盤從a移動到c
int i=0;//總共步數
void hannoi1(int n,char left,char right,char mid)
}
遞迴解決漢諾塔問題
何為漢諾塔問題 漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間...
遞迴解決漢諾塔問題
漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。c語言實...
遞迴解決漢諾塔問題
漢諾塔問題 有三根相鄰的柱子,標號為a,b,c,a柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子乙個乙個移動到柱子b上,並且每次移動同一根柱子上都不能出現 子在小盤子上方,求至少需要多少次移動。我們首先假設n 1,那麼move n 1,因為這時候只需要從a c便可以。接下來假設n 2...