如何从网格内的一个点移开

How to move away from a point inside a grid

我正在制作 Goat/Butcher 游戏(自上而下,基于二维网格)。山羊必须避开屠夫,否则他将付出最终的代价。山羊被限制在一个看起来像这样的区域:

我将如何以最合乎逻辑的顺序将山羊从屠夫那里移开,所以当它走投无路时,它会像这样移动:

是否有任何寻路算法可以为山羊找到最佳目的地?

备注:

我无法访问屠夫的属性,例如速度、速度或类似属性。但是,我可以查询它当前 (x/y) 的位置、方向和到我们山羊的距离。

山羊比屠夫跑得快。

允许对角线移动。

网格内没有障碍物。

我会在 java 中写这篇文章。

取决于您想如何逃脱。 greedy algorithm 会很擅长离开,如果山羊可以做出的每个动作都有一个与之相关的权重,这样让你走得更远的动作更有价值(这可以根据山羊的 x,y 来计算Butcher 和每个位置的 x,y)。从中您可以找到短期收益最大的路径。您可能希望限制搜索的深度以满足您的需要。

如果你想找到到最远点的最短路径 dijkstra's algorithm 会更好,但你必须找到一种方法来确保山羊在前往的途中不会靠近屠夫那一点。

考虑到这个问题,贪心算法可能是更好的选择,因为短期回避在您的问题中可能更重要。