hanooi漢諾塔遞迴問題

2021-08-13 06:23:46 字數 883 閱讀 2116

漢諾塔問題

問:如何移?最少要移動多少次?

輸入輸入為乙個整數n和3個字元,表示有n個盤子以及3根桿的編號。(n<=10)

輸出輸出每一步移動盤子的記錄。一次移動佔一行。

每次移動的記錄為例如3:a-->b 的形式,即把編號為3的盤子從a杆移至b杆。

我們約定圓盤從小到大編號為1, 2, ...n。即最上面那個最小的圓盤編號為1,最下面最大的圓盤編號為n。

樣例輸入

3 a b c

樣例輸出

1:a-->c

2:a-->b

1:c-->b

3:a-->c

1:b-->a

2:b-->c

1:a-->c

(以下所說的移動都是必須滿足從上到下依次增大的情況)

經典的遞迴問題,這裡說思路,先從最簡單的情況開始推理,假如是兩個的情況,先把第乙個放到b柱子,再把第二個放到c柱子,再把b柱子上的放到c柱子即可完成。這樣的話就完成了兩個的情況

假如一開始有三個盤子,則我們可以怎麼辦呢?我們需要先把上面兩個移動到b,再把第三個移動到c,再把b柱子上的兩個移動到c,這樣才行。已知了兩個盤子從a移動到c的情況,那麼只要把c換成b,再把第三個移動到c,再把b柱子上的移動到c即可。這樣就是三個盤子的情況。

依次類推可以推導四個盤子的情況。

#include

#include

#include

#include

#include

using namespace std;

void hanooi(int n,char a,char b,char c)

漢諾塔問題(遞迴)

題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...

漢諾塔問題(遞迴)

問題 漢諾塔問題 解法 遞迴求解 思路 先把n 1從a移動b 在把第n個從a移到c 使用遞迴使得 變得簡單 複雜度 2的n次方 1 includeint step 1 void hanoi int level,char a,char b,char c 1 當盤子數大於1時,先把n 1個從a借助c移動...

漢諾塔問題(遞迴)

漢諾塔 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,有三根柱子。印度教的主神梵天在創造世界的時候,在其中一根柱子上從下到上地穿好了由大到小的64片金盤,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金盤 一次只移動一片,不管在哪根柱子上,小片必須在...