亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hanoi塔問題怎么解決

發布時間:2021-12-17 16:20:41 來源:億速云 閱讀:105 作者:iii 欄目:云計算

這篇文章主要介紹“Hanoi塔問題怎么解決”,在日常操作中,相信很多人在Hanoi塔問題怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hanoi塔問題怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Hanoi塔問題——遞歸方法求解    

假設有三個分別命名為x、y、z的圓柱形塔座,在塔座x上插有n個半徑大小各不相同,以小到大由上而下編號為1,2,····,n,如圖所示。現在要求將X軸上的n個圓盤移至塔Z上并仍按原來的順序疊放,圓盤移動時必須遵循以下規則:

1.每次只能移動一個圓盤

2.圓盤可以插在X、Y、Z任意一個塔座上

3.任何時刻都不能將一個較大的圓盤壓在較小圓盤之上

如何實現圓盤的移動呢?這就要用到我們強大的遞歸思想。設一個變量n用來調用任意一個圓盤,當n=1時,只要將一號圓盤從X上移動到Z上即可;當n>1,需要利用Y做中間塔,若能設法將壓在n號盤上的n-1個圓盤從X移至Y上,然后再將n號盤移到Z上,最后將Y上的n-1個圓盤移到Z上即可!而整個過程中對那n-1個圓盤進行的兩次整體操作都可以分別作為一個完整的Hanoi問題。

由此求解的C函數如下:

void move(char a,int n,char c)

{

//此函數的操作為:將a塔上編號為n的圓盤移至c塔上

//此處省略若干字。。。

}

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

//將塔座a上的n個圓盤搬到c上,b作為中間塔

{

if(n==1)move(x,1,z);

else

{

Hanoi(n-1,x,z,y);

move(x,n,z);

Hanoi(n-1,y,x,z);

}

}

可以看出,整個程序都不需要用到實際用于存放Hanoi塔的存儲空間(因為算法與客觀存在的數據無關嘛),所以move函數可以寫成:printf(“將%i號盤從%c塔移到%c塔”,n,a,c);

到此,關于“Hanoi塔問題怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青神县| 北安市| 库尔勒市| 遵义市| 大渡口区| 宁远县| 永州市| 喀喇| 汤原县| 微山县| 清远市| 安义县| 白沙| 德安县| 铜川市| 民县| 德保县| 宝应县| 内江市| 吐鲁番市| 临桂县| 博湖县| 北票市| 枝江市| 茌平县| 曲沃县| 鄂托克前旗| 华容县| 林芝县| 民丰县| 古交市| 江阴市| 滨海县| 保定市| 江孜县| 梓潼县| 砀山县| 新晃| 桐柏县| 北辰区| 凤翔县|