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

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

  • (最佳,类似于递归算法的输出)
  • 将磁盘1移至棒B
  • 将磁盘2移至杆C
  • 将磁盘1移至杆C
  • (非最佳使用计划)
  • 将磁盘1移至杆C
  • 将磁盘2移至棒B
  • 将磁盘1移至棒A
  • 将磁盘2移至杆C
  • 将磁盘1移至杆C

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

    最佳答案

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

    如果您开始使用“备用”杆,则堆栈中有偶数个磁盘
    如果堆栈中的磁盘数量奇数,则开始使用“目标”杆

    09-05 04:30