假设我们有一个二维网格,上面有棋子,就像一个游戏板。
-爪子一次可以通过一个细胞向任何方向移动。
-棋子不能占据相同的空间或相互穿过(交换位置)。
如果一次只移动一个棋子就很简单了。
不过,我希望所有的棋子都能同时移动,所以所有的棋子都需要在提交任何东西之前进行检查,因为有些棋子依赖于其他棋子。
例如:
典当甲想搬进典当乙的牢房。
我们需要检查典当B是否移动只有当B要释放它的细胞时,A才能移动。
我正试图找出如何以一种合理的优化方式来处理这样一个问题。
到目前为止,我提出的所有问题都不可避免地会导致无限循环或无法解决所有的棋子。
我到far的最佳方法是列出所有需要的移动并遍历它们。
如果一个运动需要解决另一个运动,我会创建一个链,直到我遇到一个可以解决的运动,并相应地解决所有运动,回到链中。
然而,如果棋子是圆的,这会导致问题。

最佳答案

有了这个问题,只有典当的最后位置才有意义。他们来自哪里并不重要。所以你唯一需要检查的是,在他们的最后位置的爪子是否相互冲突。
如果是这样,你会遇到两个或更多的爪子想占据同一位置的情况。如果是,你可以做两件事:
一。解决典当的问题,让他们选择移动到不同的位置(还没有被任何典当占领)。
2反转所有动作。
在我看来,你是在说:一个人不能移动,所以需要返回,但这个位置现在已经被占用,典当需要返回,等等。如果是这样,你实际上是在说你的典当不是同时移动。
希望这对你有帮助

关于algorithm - 同时验证2D网格上多个棋子的移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57547137/

10-11 07:08