有四堆在第一个堆栈上有n个数字1,2,…n按随机顺序排列。其他三堆是空的。目标是,给定第一个堆栈的状态,确定是否可以将所有元素移动到最后一个堆栈,以便对它们进行排序。允许的移动是将元素从第一个堆栈移动到第二个或第三个堆栈,以及从第二个或第三个堆栈移动到第四个堆栈(1>2,1>3,2>4,3>4)。与河内的塔不同,较大的塔可以建在较小的塔上。
我应该写一个程序来做这个,但我不能想出一个算法请帮忙。

最佳答案

由于缺乏进一步的了解,我将此作为一个图形搜索。
每个游戏状态都是一个堆栈数组。注意,为了平等
第二和第三个堆栈是可交换的,因此以下应该是
认为相同:

((1 3 5)
 (2 4)
 (7 9)
 (0))

((1 3 5)
 (7 9)
 (2 4)
 (0))

图是有向无环图。顶点是博弈状态,
边缘移动。
算法是从给定的第一个开始创建这个图
状态,但是删除所有不能导致目标状态的状态,并且
把所有相同的州联合起来
广度优先)。
不能达到目标的国家是那些国家
其中最后一个堆栈不仅包含升序中的最低数字,或者
其中一个过渡堆栈不是按降序排列的。
可能会有进一步的限制。尤其是,我不确定
是否没有方法根据
第一个堆栈直接(这将使这个算法
多余的)。

10-06 04:51