我正在做一个关于使用线性规划来规划河内塔问题的任务,我不允许使用任何递归函数。问题是我的解决方案不像递归方法那样最优。它产生冗余步骤。例如:
我有3根杆子分别命名为A,B,C,有2根名为1,2的磁盘(磁盘1小于磁盘2,磁盘1位于磁盘2上),则有2种方法可以移动所有磁盘使用杆B作为中间杆,从杆A到杆C,如下:
那么我如何(更精确:可编程的算法)知道磁盘1必须首先移动到杆B而不是移动到磁盘C以获得最佳解决方案?我真的很感谢你的帮助。谢谢!
答案 0 :(得分:9)
我想要想象棘轮怪胎回答。
更大的尺寸以相同的方式工作。
{initial, spare, destination}
。你的开始动作取决于2的提醒:
if n % 2 == 0
,从备用杆开始if n % 2 == 1
,从目标栏开始答案 1 :(得分:4)
关键是要知道需要移动多少个磁盘:
堆叠中有偶数个磁盘,您可以从“备用”杆开始 如果堆栈中有奇数个磁盘,则启动“目标”杆