c之漢諾塔問題,C 之漢諾塔問題

2022-01-03 11:12:29 字數 4152 閱讀 7248

1樓:匿名使用者

我沒研究過漢諾塔,但是c/c++有很多時候是可以用陣列來解決問題而避免使用指標的。

2樓:匿名使用者

漢諾塔是乙個經典的遞迴問題

不需要用到指標的

遞迴思想就是 如果只有乙個盤子

那麼 把盤子直接移到目的柱

有兩個盤子 把最上面乙個移動到中間柱

把最下面的乙個移動到目的柱 然後把中間的移動到目的柱當規模為n的時候也就是這樣的遞迴思想

把上面的n-1個移動到中間柱 把最後乙個移動到目的柱然後再把n-1個移動到目的柱

我只把思想給你解釋一下

至於** 這麼經典的程式 網上多的是

去找找就有了

3樓:匿名使用者

#includeusing namespace std;int main() 沒有使用指標,符合你的要求,呵呵

4樓:匿名使用者

採用遞迴呼叫就行:#include

using namespace std;void move(char getone,char putone)

執行結果:

5樓:匿名使用者

#include

using namespace std;

void move(int n,char ch1,char ch2,char ch3)

}int main()用這個

6樓:次元說

漢諾塔問題怎麼解決,可以利用遞迴法來解決。設移動盤子數為n,為了將這n個盤子從a杆移動到c杆,可以以c盤為中介,從a杆將1至n-1號盤移至b杆。將a桿中剩下的第n號盤移至c杆。

以a桿為中介;從b杆將1至n-1號盤移至c杆。這樣漢諾塔問題就解決了

c++漢諾塔問題。

7樓:bsr弧度的微笑

哈哈 很簡單的:我說下遞迴的理解方法(拿你說的漢諾塔做例子),簡單的話給我加分哦 ~親

首先:對於遞迴這一類函式,你不要糾結於他是幹什麼的,只要知道他的乙個模糊功能是什麼就行,等於把他想象成乙個能實現某項功能的黑盒子,而不去管它的內部操作先,好,我們來看下漢諾塔是怎麼樣解決的。(借用一下樓下的** 呵呵)

首先按我上面說的把遞迴函式想象成某個功能的黑盒子,void hanoi(int n,char one,char two,char three); 這個遞迴函式的功能是:能將n個由小到大放置的小長方形從one 位置,經過two位置 移動到three位置。那麼你的主程式要解決的問題是要將m個的"漢諾塊"由a借助b移動到c,根據我們上面說的漢諾塔的功能,我相信傻子也知道在主函式中寫道:

hanoi(m,a,b,c)就能實現將m個塊由a借助b碼放到c,對吧?所以,看樓下的主程裡面有hanoi(m,'a','c','b');這個呼叫。

接下來我們看看要實現hannoi的這個功能,hannoi函式應該幹些什麼?

在hannoi函式裡有這麼三行

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

同樣以黑盒子的思想看待他,要想把n個塊由a經過b搬到c去,是不是可以分為上面三步呢?

這三部是:第一步將除了最後最長的那一塊以外的n-1塊由one位置經由three搬到two 也就是從a由c搬到b 然後把最下面最長那一塊用move函式把他從a直接搬到c 完事後 第三步再次將剛剛的n-1塊借助hannoi函式的功能從b由a搬回到c 這樣的三步實習了n塊由a經過b到c這樣乙個功能,同樣你不用糾結於hanoi函式到底如何實現這個功能的,只要知道他有這麼乙個神奇的功能就行

最後:遞迴都有收尾的時候對吧,收尾就是當只有一塊的時候漢諾塔怎麼個玩法呢?很簡單吧,直接把那一塊有amove到c我們就完成了,所以hanoni這個函式最後還要加上 if(n==1)move(one,three);(當只有一塊時,直接有amove到c位置就行)這麼乙個條件就能實現hanoin函式n>=1時將n個塊由a經由b搬到c的完整功能了。

遞迴這個複雜的思想就是這樣簡單解決的,呵呵 不知道你看懂沒?純手打,希望能幫你理解遞迴

總結起來就是不要管遞迴的具體實現細節步驟,只要知道他的功能是什麼,然後利用他自己的功能通過呼叫他自己去解決自己的功能(好繞口啊,日)最後加上乙個極限情況的條件即可,比如上面說的1個的情況。

8樓:九華閆女

遞迴解決,算是經典了,幾乎任何一本寫演算法的教材中都有!

c++的漢諾塔問題

9樓:匿名使用者

漢諾塔問題可以用迭代法求解,只不過方法很繁雜!我們老師開始講過,我現在忘了!

10樓:匿名使用者

在《資料結構》一書中講過:有些問題只能用遞迴的方法來解,典型的就是漢諾塔,因為問題的解法是遞迴的,所以,現在還沒有用迭代的解法求解的

資料結構 用物件導向方法與c++語言描述(第二版)p103

c++漢諾塔問題求解

11樓:蓉城飛將

這是乙個典型的遞迴演算法,也是數學中經典的的問題。

其實演算法非常簡單,當盤子的個數為4時,移動的次數應等於2^4 – 1=15次。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子a上,根據圓盤的數量確定柱子的排放順序:按順時針方向依次擺放 a b c;(這裡我用abc代替你**中的one two three 為了看著方面)

⑴按順時針方向把圓盤1從現在的柱子移動到下一根柱子,若圓盤1在柱子a,則把它移動到b;若圓盤1在柱子b,則把它移動到c;若圓盤1在柱子c,則把它移動到a。

⑵接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步沒有明確規定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。

⑶反覆進行⑴⑵操作,最後就能按規定完成漢諾塔的移動。

所以結果非常簡單,就是按照移動規則向乙個方向移動片:

4階漢諾塔移動:a→b,a→c,b→c,a→b,c→a,c→b,a→b,a→c,(最大的已經移動到c,a上沒有碟片)

然後是b→c,b→a,c→a,b→c(此時第二**片已經挪到c上,b上沒有碟片)

然後a→b,a→c(此時第三**片已經挪到c)

最後b→c 結束

當你理解了這個過程再去看演算法 其實就是一層一層往裡呼叫hanoi函式,中間用move移動盤子,然後再一層一層返回。

不知道說到這你能不能想明白,如果還不明白可追問

12樓:次元說

漢諾塔問題怎麼解決,可以利用遞迴法來解決。設移動盤子數為n,為了將這n個盤子從a杆移動到c杆,可以以c盤為中介,從a杆將1至n-1號盤移至b杆。將a桿中剩下的第n號盤移至c杆。

以a桿為中介;從b杆將1至n-1號盤移至c杆。這樣漢諾塔問題就解決了

13樓:水上漂湯

關於遞迴的理解,首先你要認定你的函式能夠執行你想要的操作。比如,定義hanoi的時候,你就要認為它就是把n個盤,從one經過two移動到three。怎麼移動n個盤呢?

先把n-1個移動到中間那個柱子two,就是hanoi(n-1,one,three,two);然後把剩下的乙個從one移到three,最後把那n-1個移動到three

14樓:仙戈雅

執行過程就是:把n-1圓盤借助c柱移到b柱,第n個圓盤直接移到c柱(目的柱),反覆如此。。。

如果你學過資料結構的二叉樹的話,那麼對漢諾塔的移動整個過程可以說是瞭如指掌。因為很明顯它就是乙個棵完全二叉樹的中序遍歷的結果。

如果沒有學過資料結構的二叉樹,頂多就是知道漢諾塔的遊戲規則。 目前它的注釋也是從巨集觀的角度去解釋它的每句話的含義。

c++雙層漢諾塔問題。。。很有意思也很難

15樓:

其實和單層的一樣,將設有2n個在a

起始:a,需要移動2n,則先將2n-1個移到c,再將乙個移到b,這時最大的兩個分別已經到位

起始:c,需要移動2n-2,則先將2n-4個移到a,再將乙個移到b,這時次大的兩個分別到位

起始:a,需要移動2n-4,則先將2n-5個移到a,再將乙個移到b,這時第三大的兩個分別到位

...以此類推就行,具體請去參考理解單層漢諾塔的實現

求C漢諾塔遞迴詳細過程,求C漢諾塔遞迴詳細過程

找本講資料結構或演算法的書,看一下遞迴那章。c語言算漢諾塔,遞迴時的輸出是怎麼一步一步來的?如圖,求大神幫忙 例如,n 3,三個柱子是a b c 那麼是這樣 呼叫的層次已經用製表符分開 hanoi 3,a,b,c hanoi 2,a,c,b hanoi 1,a,b,c move 1,a,c move...

永恆之塔問題

是收費的,韓服收費是這樣的 永恆之塔 收費模式為月費制,玩家可在標準使用券 3個月使用券 3小時使用券,30小時使用券等多種使用券中選擇適合自己的進行付費。1.標準使用券 30天 300小時 19800韓元 折合人民幣約為94元 2.三個月使用券 90天 900小時,47520韓元 折合人民幣約為2...

永恆之塔裁縫製作,達人製作的材料問題

白龍王bai呢和名龍王呢du俗稱龍魚系列但是呢由於zhi 龍族材料dao的市場很緊俏 所以呢 這個階段的材料有個主體材料 就是一樓說的心臟 其他的都是加工後的回材料 http aion.duowan.你在這個鏈結下可以找到你答所要知道的所有關於永恆之塔的內容 具體是什麼我就不贅述了 50級龍族材料 ...