Java 河内塔问题-线性规划

Java 河内塔问题-线性规划,java,Java,我在做一个关于规划河内塔的作业,使用线性规划,我不允许使用任何递归函数。问题是,我的解决方案并不像递归方法那样是最优的。它会产生多余的步骤。例如: 我有3根分别命名为A、B、C的杆,有2个名为1、2的盘(盘1比盘2小,盘1在盘2上),然后有2种方法将所有盘从杆A移动到杆C,使用杆B作为中间杆,如下所示: (与递归算法的输出类似) 将盘1移到连杆B上 将盘2移到连杆C上 将盘1移到连杆C上 (非最优使用规划) 将盘1移到连杆C上 将盘2移到连杆B上 将盘1移到连杆A上 将盘2移到连杆C上 将

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

我有3根分别命名为A、B、C的杆,有2个名为1、2的盘(盘1比盘2小,盘1在盘2上),然后有2种方法将所有盘从杆A移动到杆C,使用杆B作为中间杆,如下所示:

  • (与递归算法的输出类似)
    • 将盘1移到连杆B上
    • 将盘2移到连杆C上
    • 将盘1移到连杆C上
  • (非最优使用规划)
    • 将盘1移到连杆C上
    • 将盘2移到连杆B上
    • 将盘1移到连杆A上
    • 将盘2移到连杆C上
    • 将盘1移到连杆C上

  • 那么,我如何(更精确地说:一种可编程的算法)知道磁盘1必须首先移动到棒B,而不是移动到磁盘C才能获得最佳解决方案呢?我非常感谢你的帮助。谢谢

    关键在于知道需要移动多少磁盘:

    如果堆栈中有偶数个磁盘,则从“备用”磁棒开始

    如果堆栈中的磁盘数量为奇数,则从“目标”棒开始

    我想想象一下棘轮怪胎的回答

    尺寸5的示例

    尺寸6的示例

    更大的尺寸也是如此

    其他细节
    • 任务是编写算法实现
    • 共有3根棒
      {初始棒、备用棒、目标棒}
      。您的出发点取决于以下两点:
      • 如果n%2==0
        ,则从备用棒开始
      • 如果n%2==1
        ,则从目标棒开始
    • 需要2^n-1移动,才能将整个堆栈移动到目标堆栈

    我使用递归算法进行检查,你说得对!非常感谢你!您可以始终使用数据堆栈来避免递归,并实现基本相同的算法。