"河内塔"的解决方案当所有磁盘都不在A中时

Moe*_*ini 4 algorithm towers-of-hanoi

如你所知,有一些方法可以解决河内塔,但是他们要求所有磁盘在开始时都在一个塔中.

现在我想知道有没有办法解决它,其中磁盘已经开始在塔之间随机分布.

Rei*_*ica 8

是的,它仍然可以解决(假设较小的磁盘顶部没有大磁盘).例如:

        1
  4     2
  6     5     3
  -------------
Run Code Online (Sandbox Code Playgroud)

找到包含1的最大连续堆栈.这里是{1,2}.将该堆栈移动到下一个最大的磁盘上,忽略其他任何磁盘.您可以在此步骤中使用标准Tower of Hanoi算法.

              1
  4           2
  6     5     3
  -------------
Run Code Online (Sandbox Code Playgroud)

重复上述步骤.包含1的下一个连续堆栈现在是{1,2,3}.将其移至4

  1
  2
  3           
  4           
  6     5  
  -------------
Run Code Online (Sandbox Code Playgroud)

同样的事情 - 将{1,2,3,4}移到5.

        1
        2
        3     
        4     
  6     5    
  -------------
Run Code Online (Sandbox Code Playgroud)

现在将{1,2,3,4,5}移到6,你已经完成了.如果需要将整个堆栈移动到特定的挂钩,请再次使用标准解决方案.

  • 好吧,在你的第二步示例中,最好将4移到5以上,然后将1-2移到4以上.你可以跳过第三步. (3认同)