河内塔问题 - 线性计划

时间:2011-06-04 16:39:52

标签: java

我正在做一个关于使用线性规划来规划河内塔问题的任务,我不允许使用任何递归函数。问题是我的解决方案不像递归方法那样最优。它产生冗余步骤。例如:

我有3根杆子分别命名为A,B,C,有2根名为1,2的磁盘(磁盘1小于磁盘2,磁盘1位于磁盘2上),则有2种方法可以移动所有磁盘使用杆B作为中间杆,从杆A到杆C,如下:

  1. (最优类似于递归算法的输出)
    • 将磁盘1移至杆B
    • 将磁盘2移至杆C
    • 将磁盘1移至杆C
  2. (非最佳使用计划)
    • 将磁盘1移至杆C
    • 将磁盘2移至杆B
    • 将磁盘1移至杆A
    • 将磁盘2移至杆C
    • 将磁盘1移至杆C
  3. 那么我如何(更精确:可编程的算法)知道磁盘1必须首先移动到杆B而不是移动到磁盘C以获得最佳解决方案?我真的很感谢你的帮助。谢谢!

2 个答案:

答案 0 :(得分:9)

我想要想象棘轮怪胎回答。

大小为5的示例

enter image description here

大小为6的示例

enter image description here

更大的尺寸以相同的方式工作。

其他细节

  • 任务是编写Hamilton path算法实现。
  • 有3根杆{initial, spare, destination}。你的开始动作取决于2的提醒:
    • if n % 2 == 0,从备用杆开始
    • if n % 2 == 1,从目标栏开始
  • 2 ^ n-1 移动,将整个堆栈移动到目标堆栈。

答案 1 :(得分:4)

关键是要知道需要移动多少个磁盘:

堆叠中有偶数个磁盘,您可以从“备用”杆开始 如果堆栈中有奇数个磁盘,则启动“目标”杆