漢諾塔(6種情況)

2021-10-04 16:51:57 字數 1363 閱讀 6293

a–>c

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

a–>b

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

b–>a

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

b–>c

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

c–>a

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

c–>b

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

(hanoi(n,『a』,『b』,『c』);//原始,輔助,目標)

函式裡的方法已經確定了三個引數哪個是初始哪個是輔助哪個是目標,所以改一下傳過去的實參就行了!

固定引數位置,改變傳過去引數值;

函式裡的abc是形參,傳過去的』a』『b』'c』是實參

拿b—>a的例子來說,就是輸入按固定的位置開始,b借助c到a上,呼叫遞迴函式的時候,就是把問題分解為把每一層最大的依次放到a上,那麼第一次的結果就是上邊n-1個盤子會到c上,那麼接下來就相當於從c借助b到a上,相當於又有乙個新的(小規模)問題出現了。依次進行多次呼叫函式用這個規律就解決了

a->c就是先把最大的放到c,那麼其他的都放到了b上,下一次的時候,就是b中最大的放到a上,剩餘的都在c上,這樣就轉回來了。

其他的分析也都一樣,就是問題變成了每一次都把最大的放在目標位置上。

附上b–>a的例子:

#include#includevoid hanoi(int n,char a,char b,char c)//漢諾塔

}int main()

a借助c到b就是acb、b借助a到c就是bac、c借助b到a就是cba

其他幾種都是類似,主要就是理解遞迴啦!

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...

漢諾塔合集之漢諾塔3

漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...

漢諾塔問題

問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...