相信大家已經知道漢諾塔問題了,這裡就不再贅述了。漢諾塔這一問題在去年我認為自己搞清楚了,但是現在回頭看這一問題,發現並不是那麼清楚。經典的題目果然是經典題,之前之搞清楚了它是怎麼實現的,原理好像懂了,但肯定是沒有掌握。現在又學習了一下,感覺弄懂了,故寫下此篇。
首先我們需要明白乙個前提,最大的盤子不會影響其他盤子的移動。且對於問題,我們需要按順序把盤子從大到小移到c塔上。如:有n個盤子時,步驟為先把最大的移到c上,再把第二大的盤子移到c上,第三大移到c上……
當n=1時,做法a->c;
當n=2時,做法a->b,a->c,b->c。這一步可以這樣理解,當有兩個盤子時我們需要先把第二大的盤子移到b上,再把最大的盤子移到c上,最後把b上的移到c上。也就是先進行一步f(1,a->b),在進行f(1,a->c),最後f(1,b->c),其中f(n,x->y)表示把x上的n個盤子移到y。
當n=3時,我們需要把最大的盤子移到c上,那麼我們應該把a上的2個盤子移到b上,再把a上最大的移到c上,最後把b上的2個盤子移到c上即可。也就是f(2,a->b)+f(1,a->c)+f(2,b->c)。此時規模轉變為n=2的情況。
當n=n時,根據之前所說,我們需要把a上n-1個盤子移到b上,再把最大的盤子(即a上最後乙個盤子)移到c上,最後把b上n-1個盤子移到c上就完成了。也就是f(n-1,a->b)+f(1,a->c)+f(n-1,b->c)。
需要注意的是:f(n-1,a->b)=f(n-2,a->c)+f(1,a->b)+f(n-2,c->b)。
即完成把大問題n,化為小一點的問題n-1,再小一點的n-2,……,直到化為jian簡單的1。
**如下:
#includeusing namespace std;
int fun(int n,char start,char mid,char end)
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.任何時刻都不能將乙個較...