在我的(小)业余时间里,我提出了一个小型的个人项目,作为练习使用新技术的动力(对我来说!),例如Python 3&节点JS。
我想尝试为拼图创建一个解决方案例程,类似于建筑中的河内塔,如下图所示:
拼图规则
算法:
我一直在寻找最适合的多堆栈排序'基于模式的算法,以避免重新发明轮子,但无法找到任何看似相关的东西,尽管我可能在错误的地方寻找。 河内的经典递归看起来太基本了,而算法如Shunting Yard和Traveling Salesman(以及标准的Bubblesort,Quicksort等) 看起来不太合适(如果我错了,请纠正我!)。
我的问题:
任何人都可以建议或推荐一个合适的基础算法,我可以构建或适应解决这个难题吗?它可能需要递归,才能找到正确的路径,但是我确定这种类型的多堆栈或基于模式的排序已经在某个地方完成了吗? 我最终希望通过所需的最少步骤达到最佳效率,但后来才会出现。
正如我所提到的,最有可能的是我最终会使用Python或JS来实现这一点,但是在这个阶段我们都会欣赏任何想法或片段 - 我希望自己能够开展这项工作以后。
提前致谢!
艾伦
答案 0 :(得分:1)
一种方法是首先将3个未使用的块移动到S4。设置分布,使S1 = 3个块,S2 = 3个块,S3 = 2个块。如果S3有1或2个未使用的块,则需要1或2次移动才能将未使用的块移动到S4。重复S2,进行1到3次移动以移动1到3个未使用的块。最后从S1中删除未使用的块。
现在你有5个街区和3个街区。假设S1有3个块,S2有2个块。属于S1顶部的块可以采取最多的移动结束,这是S1所具有的唯一块。例如,属于S1顶部的块位于S2的顶部。因此,从S2移动2个块到(现在为空)S3,因此键块位于S3的底部。然后将所有3个块从S1移动到S2,然后将键块移动到S1。之后,问题变成了4个块和3个大小为4,3,3的堆栈,这应该不会太困难。完成后,S4中的3个块可以移动到S2或S3。
对于3堆栈排序,多相合并排序是最快的,但所有3个堆栈需要具有相同的大小,因此这里不适用。