Hanoi塔用n>重复迭代3个钉子

时间:2013-04-08 15:48:44

标签: c algorithm

3个钉(或杆,或任何你称之为)的迭代算法是重复以下两点:
1.将最小的磁盘向右/向左移动(如果是奇数/偶数) 2.在不触及最小磁盘的情况下向左移动一个

我的问题是 - 是否有一些类似的算法用于n> 3钉?

我在互联网上找不到这个(至少是迭代的)。我自己无法解决任何问题。上面的算法不起作用 - 它会无意中移动磁盘。

我知道我之前发过2种相关问题,你不太欢迎他们,所以在你投票之前 - 只需在评论中写信给我自己研究一些信息,我就是在删除这个帖子。

2 个答案:

答案 0 :(得分:2)

具有n> 3的3-peg Hanoi问题的一般递归算法。 1个磁盘(n == 1个案例很简单)是:

  1. 将n-1个磁盘从源挂钩移动到第三个挂钩(不是源或目标的挂钩)
  2. 将最大的磁盘移动到目标挂钩。
  3. 将n-1个磁盘从第三个挂钩移动到目标挂钩。
  4. 超过3个钉子,算法是相同的。只需将“第三个挂钩”替换为“任何未使用的挂钩”。

    请注意,该算法不会使用“向左移动”或“向右移动”等术语。

    正如@nhahtdh在评论中指出的那样,任何递归算法都可以通过标准方法转换为迭代算法。

答案 1 :(得分:1)

来自Wikipedia article on Tower of Hanoi的回答:没有非强力算法用于找到可证明最优的解决方案,尽管有一种算法可能是最优的。

虽然三钉版本有一个如上所述的简单递归解决方案,但对于具有四个钉子(称为Reve's puzzle)的河内塔问题的最佳解决方案,更不用说更多钉子,仍然是一个悬而未决的问题。这是一个很好的例子,说明如何通过稍微放松一个问题约束来简化可解决的问题。