设置
500ms
汉诺塔游戏
汉诺塔是一个著名的数学游戏或谜题,据说起源于印度的一个古老传说。传说中有一座寺庙,里面有三根柱子,第一根柱子上套着64个大小不一的金盘。僧侣们的任务是将所有金盘从第一根柱子移到第三根柱子上,但必须遵守以下规则:
- 每次只能移动一个盘子
- 大盘不能放在小盘上面
传说当僧侣们完成这个任务时,世界就会终结。这个谜题后来被法国数学家爱德华·卢卡斯在推广。
在线玩汉诺塔
本页面模拟汉诺塔游戏,你可以选择盘子的数量,然后点击开始游戏。在手动模式下,通过拖放实现盘子移动,并检查移动是否合法。在自动模式下,会自动使用递归算法找出最优解,显示总需要的步骤书,并开始自动移动盘子。自动模式可以选择移动速度,方便你观察整个移动过程。
本页面还提供了获取提示功能,每次不知道怎么移动的时候,可以点击获取提示。获取提示功能的核心是通过比较当前状态与理想状态来确定下一步最佳移动。就算你当前放置盘子的位置不对,提示也会告诉你最优的移动方法。
从头开始自动实现移动比较简单,就是一个递归问题。如果手动模式下,操作者按照这里的递归步骤来移动,获取提示也比较简单。但如果操作者没按套路出牌,走了一些冗余步骤,这时候怎么给出最优的下一步提示呢?可以去看看 wiki 的解释,哈哈,是不是很难懂。再看看本页面的实现代码,是不是很简单!