如何找到将物品移到堆栈中某个位置的最小移动次数?
给定一组NXP堆栈,其中N为堆栈数,P为堆栈容量,我如何计算从位置A的某个节点移动到任意位置B所需的最小交换数?我正在设计一个游戏,最终目标是对所有堆栈进行排序,以使它们都具有相同的颜色。 # Let "-" represent blank spaces, and assume the stacks are stacks = [ ['R', 'R', 'R', 'R'], ['Y', 'Y', 'Y', 'Y'], ['G', 'G', 'G', 'G'], ['-', '-', '-', 'B'], ['-', 'B', 'B', 'B'] ] 如果我想在插入一个“B” stacks[1][1]这样stacks[1] = ["-", "B", "Y", "Y"]。如何确定所需的最小移动次数? 我一直在研究多种方法,尝试过遗传算法,可以从状态生成所有可能的移动,对它们进行评分,然后继续沿最佳得分路径前进,我还尝试运行Djikstra的算法来对问题进行寻路。看起来很简单,但是我无法找到一种方法来让它在指数时间以外的任何时间运行。我是否缺少适用于此的算法? 编辑 我已经编写了此函数来计算所需的最小移动量:堆栈:表示堆栈中棋子的字符列表,堆栈[0] [0]是堆栈[0]的顶部stack_ind:将要添加到堆栈中的片断的堆栈stacks.exe def calculate_min_moves(stacks, stack_ind, …