中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

稻城县| 长兴县| 榆树市| 安国市| 信丰县| 通榆县| 闻喜县| 阳曲县| 威远县| 宁蒗| 临邑县| 故城县| 十堰市| 潼南县| 丹东市| 新干县| 内江市| 亚东县| 宜兰县| 城市| 中西区| 读书| 静海县| 忻州市| 宣威市| 咸丰县| 冀州市| 东乌| 申扎县| 万年县| 镶黄旗| 旺苍县| 休宁县| 新竹市| 潞西市| 石台县| 合作市| 吴江市| 西充县| 呼图壁县| 吉水县|