【发布时间】:2023-03-13 09:32:01
【问题描述】:
有一个棋盘,其中有 m*m 个盒子,每个盒子都分配了一个非零整数,除了一个被标记为 0 并被视为空的盒子。只有空盒子的垂直和水平邻居可以向它移动,留下它们的放置为空置。为了解决这个难题,我们必须按照它们的价值递增的顺序排列盒子,空置的盒子(标记为零的盒子)在最后(板的右下角)。但是像所有其他工程师一样,我们非常懒惰,想用最少的步骤解决它。
那么除了回溯,我们应该遵循什么方法。
m 为 500.. 即 500x500 板。
【问题讨论】:
-
假设你的矩阵是[[1,0,5],[2,3,4],[6,7,8]],最终结果应该是[[1,2,3 ],[4,5,6],[7,8,0]],我理解了吗?
-
必须使用回溯...添加一些启发式算法,例如贪心算法。所以我猜所有的块都会从左上角到右下角按降序排列?是吗?
-
@ShivamKalra 按从左上角到右下角的递增顺序,最后一个元素为 0。
-
这被称为 n-puzzle(15-puzzle 是最流行的版本)en.wikipedia.org/wiki/15_puzzle 解决它的一种算法被命名为 A* 在 SO 示例上有很多问题:stackoverflow.com/questions/9171665/a-and-n-puzzle-optimization