规则
河内塔是一个谜,如果你不是很熟悉它,这里是它的工作原理:
游戏场由 3 根杆和x个圆盘组成,下一个比上一个大。这些圆盘可以放在杆上,规则如下:
- 一次只能移动一个磁盘,并且必须在另一个杆的顶部移动
- 必须从杆的顶部取出磁盘
- 磁盘可以移动到某个地方,只有当目标杆上最上面的磁盘大于要移动的磁盘时
最后 - 比赛场地是这样开始的:
- 一根带有x 个圆盘的棒,排序后最大的在底部,最小的在顶部
- 一根空棒
- 一根空棒
游戏的目标是将原始的“堆叠”磁盘移动到另一根杆上,即 - 将所有磁盘放在另一根杆上,因此(再次)最大的在底部,最小的在顶部
执行
您的目标是使用您选择的编程语言编写一个程序,该程序接受输入(如下所述)并输出解决位置所需的步骤。
与往常一样,尽量缩短它。
输入
示例输入:
4-3,7-6-5,2-1
输入是一个字符串,由 3 部分组成,用逗号分隔。这些零件是 3 根杆中每根杆上的磁盘列表。它们也是分开的,这次用连字符( - ),每个子部分都是一个数字,数字越大,磁盘越大。
所以 - 对于上述输入,这将是一个视觉表示:
. . .
| =====|===== |
===|=== ======|====== =|=
====|==== =======|======= ==|==
ROD 1 ROD 2 ROD 3
输出
正如您在上面的表示中看到的 - 输入的最左侧部分是一号杆,中间是二号杆,最后一个是三号杆。
您的程序的输出应如下所示:
12,23,31,12,23,13
一个数字列表,用逗号分隔,定义了应该取出磁盘的杆,以及应该放置磁盘的杆。只有 3 个杆,所以只有 6 种可能的组合(因为必须将磁盘移动到另一个杆,而不是同一个杆):
12
13
21
23
31
32
笔记
输入不必描述处于“原始”状态的字段 - 它可以是中间解决的。
您的程序不能产生空输出。如果输入处于原始状态,只需将磁盘放在不同的杆上。
输入可以有一个空棒,如下所示:
2-1,3,
,,1
4-3,,2-1
如果输入不是这种格式,您的程序可能会产生未定义的行为。因此,如果输入无效(例如较小的磁盘上的较大磁盘,丢失磁盘,无法解决),它可以。输入将始终有效。
确保解决方案尽可能快(尽可能少转弯)-也就是说,不要浪费“12,21,12”的转弯......
测试
所以,我为你准备了这个小闪存,你可以用它来测试你的程序是否产生了一个好的解决方案,而无需写下它或任何东西。
这里是:Hanoi AlgoTest(等待它加载然后刷新——死链接:|)
要使用它,请将程序的输入粘贴到INPUT字段,并将程序产生的输出粘贴到PROCESS字段。它将以您也可以更改的速度运行模拟,并以视觉表示形式打印出底部的任何错误。
希望能帮助到你。