查找伦敦塔任务的最小移动次数

时间:2013-07-16 16:42:53

标签: algorithm math shortest pebl

我正在寻找类似于Tower of Hanoi task的任务的解决方案,但这与河内不同,因为磁盘不受大小限制。我创建的伦敦塔任务有8个磁盘,而不是传统的3或5(如维基百科链接所示)。我正在使用“{3}}软件”主要用C ++编程(虽然你不需要知道C ++使用PEBL),但也使用flex和bison(GNU版本的lex和yacc)来处理解析。“ / p>

以下是该操作中的任务内容的视频:PEBL

*每个磁盘都是一个数字。例如,蓝色磁盘= 1,红色磁盘= 2等

    1            \  
    2         ----\ 
    3         ----/     3     1
    4  5         /      2  4  5
=========              =========

左侧包含您必须移动的磁盘,以匹配右侧。共有3列。

因此,如果我使用8个磁盘制作它,我会创建一个试验看起来像这样:

    1            \  
    2         ----\        7  8
 6  3  8      ----/     3  6  1
 7  4  5         /      2  4  5
=========              =========

如何确定左侧所需的最小移动量是多少?我不需要使用PEBL对此进行编码,但我需要知道,因为我正在计算一个人每次试用的最小值。

1 个答案:

答案 0 :(得分:0)

原则很简单,它的广度优先搜索:

每个州都有一定数量的后继状态(由可能的移动定义)。

  1. 您从一组包含初始状态和步骤编号0的状态开始。
  2. 如果结束状态处于状态集中,则返回步骤编号。
  3. 增加步数。
  4. 通过将当前状态替换为每个后继状态来重建状态集。
  5. 转到2
  6. 因此,在每个步骤中,计算当前可用状态的后继状态,并查看是否达到目标状态。

    但是,请注意,这可能需要一段时间,并且会占用大量内存! 您可以在我们的情况下进行优化,因为您可以省略前一个状态。 不过,在大多数州,你将有5个可能的举动。这意味着在N步之后你将需要考虑5 ^ N个状态。

    例如,如果我没有犯错的话,你的第二个例子将需要10个动作。这将为您提供大约1000万个州。大多数现代计算机无法超越深度15搜索。

    我认为找到解决方案的算法既简单又快捷,但我们没有证据证明这个解决方案是最短的解决方案。