經(jīng)典例題-Hanoi 漢諾塔問題

1. Introduction

大梵天創(chuàng)造世界的時候做了三根柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

Time Complexity

假設(shè)有n片,移動次數(shù)是f(n).顯然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不難證明f(n)=2^n-1。

Pseudocode

/**
 *
 * @param n 盤子的數(shù)目
 * @param origin 源座
 * @param assist 輔助座
 * @param destination 目的座
 */
public void hanoi(int n, char origin, char assist, char destination) {
    if (n == 1) {
        move(origin, destination);
    } else {
        hanoi(n - 1, origin, destination, assist);
        move(origin, destination);
        hanoi(n - 1, assist, origin, destination);
    }
}

思想就是把上面的n-1移到輔助座,把最底下的移到目的座。再把輔助座的移到目的座。具體怎么移動就用遞歸。

漢諾塔問題的研究

由問題發(fā)現(xiàn)每次都是先移動第一個開始,最后一次最后移動且只移動一次。

image.png

所以當(dāng)問,第N個的需要移動次數(shù),就可以使用公式了

OJ

HDU1207
HDU1995
HDU1996
HDU1997
HDU2064
HDU2077
HDU2175
HDU2184
HDU2511
HDU2587

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前置文章:遞歸算法:www.itdecent.cn/p/703069f3ba3f . 漢諾塔問題是來源于印度傳...
    郎小凱閱讀 858評論 0 1
  • 原文鏈接(轉(zhuǎn)載請注明出處)漢諾塔的圖解遞歸算法 起源 漢諾塔(又稱河內(nèi)塔)問題是源于印度一個古老傳說的益智玩具。大...
    Dmego閱讀 1,664評論 0 0
  • 問題描述在世界中心貝拿勒斯(在印度北部)的圣廟里,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創(chuàng)造世界的時候,在...
    Java紅茶閱讀 671評論 1 2
  • 上節(jié)回顧 前夜(3) 江小南望著亮屏的手機(jī)上那一行字,曾經(jīng)心中被車輪碾壓的感覺又浮了上來。分手后那些渾渾噩噩的日...
    曉蘭sally閱讀 365評論 3 3
  • 今天,在回顧昨晚,年會頒獎前后的一幕幕的時,我突然感覺自己體悟到了“平常心”。 雖說,經(jīng)常都愛在各種場合,用“平常...
    辛佳璐Lucy閱讀 200評論 0 0

友情鏈接更多精彩內(nèi)容