汉诺塔在线就能玩的网页版,打开页面直接开局。三根柱子,圆盘 3 片到 10 片自由选,一次只能搬一片、大盘不能压在小盘上,把所有盘从左柱整体搬到右柱就算完成。页面实时显示已走步数与这一档的最少步数 2^n−1,正好用最少步搬完会标为完美。撤销次数不限;卡住了还有演示解法按钮,按递归解自动播放,分慢中快三档。各档片数的最快秒数分别记在本机浏览器。电脑和手机一样,点一根柱子取起顶端的盘,再点想放的柱子。
规则
汉诺塔的目标一句话说完:把左柱上那一摞盘子,整体搬到右柱去。
开局固定:三根柱子并排,所有圆盘按从大到小叠在最左边那根柱子上,中柱和右柱都是空的。只有两条规则,两条都不能破:
- 一次只能搬一片,而且只能搬某根柱子最顶上那一片。埋在下面的盘子动不了,得先把压在它上面的搬走。
- 大盘永远不能压在小盘上面。小压大可以,空柱子随便放,大压小不行。
搬到右柱上凑齐全部盘子才算完成,堆在中柱上不算。
本站版本的具体设置:
- 片数 3 到 10 片可选,顶栏第一个下拉切换,换片数就是重开一局。玩过的档位会在下拉里打勾。
- 顶栏一直显示三个数:已走步数、这一档的最少步数、用时。最少步数的算法是 2 的 n 次方减 1,所以 3 片 7 步,10 片 1023 步。
- 正好用最少步搬完,结算时会标成完美。完美只是当场的标记,不单独存起来。
- 撤销次数不限,一直能退回开局;退回去的那一步就不算走过。
- 计时从你落下第一片开始,搬完那一刻停表。各档片数的最快秒数分别记在本机浏览器,顶栏登录之后可以跨设备同步。
- 演示解法按钮:点下去先把盘面复位,再按递归解一步步自动播放,速度分慢、中、快三档,播放中再点一次就停。这一局用过演示就不记纪录,也不计入局数统计。
- 只做经典三柱版本,没有四柱、限时或关卡模式。
操作是同一个动作重复:点一根柱子取起它顶端的盘,再点想放的柱子。取起的那片会浮在柱子上方,点回原柱就是放弃;放不下去会提示目标柱顶端是几号盘,这一下不算步数。也可以直接从一根柱拖到另一根柱。画布下方还有左柱、中柱、右柱三个按钮。
电脑上还有一套键盘操作:左右方向键选柱,空格取放,数字键 1、2、3 直接选柱,Z 或 Backspace 撤销,R 重开本局。
技巧
规则十秒钟能学会,难的是片数一多就乱。下面几条是从「会搬」到「一步不多」的全部门道。
一、先想明白递归那一层,这是整个游戏的钥匙。 别盯着一片一片怎么动,改成问一个问题:要把 n 片从左柱搬到右柱,最大那片什么时候能动? 答案是等它上面的 n−1 片全挪到中柱、右柱空着的时候。于是整件事拆成三步:先把上面 n−1 片搬到中柱,再把最大那片一步搬到右柱,最后把中柱那 n−1 片搬过来。两头那两步是同一个问题的小一号版本,接着往下拆到只剩一片为止。想通这层,10 片和 3 片是同一道题。
二、步数为什么正好翻倍加一。 按上面的拆法,搬 n 片的次数等于搬 n−1 片的两倍再加一次,从 1 片 1 步一路推下去就得到 2 的 n 次方减 1:1、3、7、15、31、63、127、255、511、1023。这还是个证明过的下界——最大那片至少要动一次,动它之前又必须把上面 n−1 片整体挪开,所以谁也快不过它。页面上的「最少」就是这个数。
三、第一步往哪放,由片数的奇偶决定。 这是最实用的一条。片数是奇数时,第一步把最小的那片放到右柱;片数是偶数时,放到中柱。 放反了必定多绕一大圈。道理还是递归:奇数片时最上面那片最终落在右柱那一摞顶上,偶数片时它这一轮的归宿是中柱。记不住就切到 3 片试两遍。
四、三柱循环法:不用想也能走出最少步。 还有一种机械做法,完全不需要在脑子里递归,走出来的照样是最优解:
- 单数步永远搬最小的那片,并且按固定方向绕圈。片数是奇数时循环方向是左柱 → 右柱 → 中柱 → 左柱;片数是偶数时反过来,左柱 → 中柱 → 右柱 → 左柱。
- 双数步不许碰最小的那片。此时盘面上不动最小盘的合法搬法有且只有一种,找出来照做就行,根本不用选。
两种步子交替,走满 2 的 n 次方减 1 步就结束。10 片 1023 步全靠这条规律,可以一边聊天一边搬完。
五、卡住的时候,先撤销而不是硬凑。 新手最常见的毛病是走到一半发现某片盘被自己压死了,接着一片一片乱试,步数翻着番涨。撤销不限次,倒回到把小盘压错柱子的那一步重来,比在错误局面上找补划算得多。
六、想刷秒数,先把动作练顺。 纪录记的是秒数不是步数,熟练度比聪明更值钱。先在 3 片、4 片上各刷几遍完美,把奇偶开局和循环方向变成手感,再一档一档往上加。想看标准解就用慢速演示走几步,那一局不留纪录,看完重开再正式搬。
常见问题
汉诺塔怎么玩?
三根柱子,开局所有圆盘按从大到小叠在左柱上,目标是整体搬到右柱。规则只有两条:一次只能搬一片、且只能搬每根柱子最顶上那片;大盘任何时候都不能压在小盘上。本站点一下有盘的柱子就取起顶端那片,再点想放的柱子,放不下去会提示原因,不算步数。
汉诺塔最少要走多少步?
n 片的最少步数是 2 的 n 次方减 1:3 片 7 步、4 片 15 步、5 片 31 步、6 片 63 步、7 片 127 步、8 片 255 步、9 片 511 步、10 片 1023 步,每加一片翻倍再加一。这是证明过的下界,没有更快的走法。页面顶部「最少」一栏一直显示当前片数的这个数,正好用这么多步搬完就标为完美。
汉诺塔和河内塔是一回事吗?
是同一个游戏。英文名 Tower of Hanoi,Hanoi 是越南首都河内,音译成汉诺塔、意译成河内塔;跟着传说走还有梵天塔、婆罗门塔的叫法。规则完全一样:三根柱、一次一片、大不压小。搜「汉诺塔问题」出来的编程题也是同一件事。
10 片要走 1023 步,有没有不用动脑的走法?
有,而且必定最少步。把最小那片固定按一个方向绕圈搬:奇数片按左柱到右柱、右柱到中柱、中柱到左柱循环,偶数片反过来。每搬完一次最小盘,盘面上不动最小盘的合法搬法有且只有一种,照做即可。两种步子交替,走满 2 的 n 次方减 1 步就搬完。
用了演示解法还算不算纪录?
不算。点演示解法会先把盘面复位,再按递归解一步步播放,速度可在慢、中、快三档之间切,播放中再点一次就停。这一局不写进最快秒数,也不计入局数统计。撤销则不受影响,用多少次都照常记纪录。
手机能玩吗?
能玩。纯网页版,手机浏览器打开就能搬,操作和电脑一样:点一根柱子取起顶端的盘,再点想放的柱子,也可以从一根柱直接拖到另一根。画布下方有左柱、中柱、右柱三个按钮,手指按起来更稳。3 到 10 片、撤销、演示解法、计时与各档最快秒数手机上全都有。
汉诺塔问题的递归解法是什么?
把「n 片从左柱搬到右柱」拆成三步:先把上面 n−1 片借右柱搬到中柱,再把最大那片一步搬到右柱,最后把中柱那 n−1 片借左柱搬到右柱。第一步和第三步都是同一个问题的小一号版本,一直拆到只剩一片直接搬为止。按这个拆法,n 片的步数是 n−1 片的两倍再加一,所以最少步数是 2 的 n 次方减 1。本页的「演示解法」按钮播放的就是这套递归解,慢、中、快三档可切。
历史与冷知识
- 汉诺塔是法国数学家爱德华·卢卡斯在 1883 年推出的玩具。他当时署的是「克劳斯教授」这个笔名——Claus 正好是 Lucas 的字母重排。
- 随玩具附上的传说:印度贝拿勒斯的神庙里有三根金刚石柱,一根插着 64 片金盘,僧侣日夜不停地按规则搬动,等 64 片全部搬完,世界就会终结。
- 这个末日预言算得出来:64 片需要 2 的 64 次方减 1 步,也就是 18,446,744,073,709,551,615 步。一秒搬一片、不吃不睡,也要五千八百多亿年——宇宙至今才一百三十八亿岁。
- 汉诺塔几乎是所有编程课讲递归时的第一个例子,因为解法三行就能写完:搬 n−1 片过去、搬最大那片、再搬 n−1 片回来。
- 把 n 片汉诺塔的所有合法局面画成一张图(局面为点、一步合法搬动连一条线),形状正好是谢尔宾斯基三角形,最优解就是图上两角之间的最短路径。
- 每一步该搬哪片有闭式答案:第 k 步搬动的盘号,等于 k 的二进制表示里末尾 0 的个数加一,所以最小那片总在单数步上搬。
- 柱子加到四根之后问题至今没完全解决:1941 年提出的 Frame–Stewart 算法给出四柱最优步数的猜想,直到 2014 年才被证明确实最优,柱子再多仍是开放问题。本站只做经典三柱版本。
- 神经心理学里的「伦敦塔」测试就是从汉诺塔改造来的,用来评估计划能力——19 世纪的木头玩具,后来成了临床量表。