algorithm - A* 启发式 : Shortest path passing once in multiple points

标签 algorithm shortest-path pacman

我正在尝试为清晰 map 的吃 bean 人游戏想出一个又好又快的启发式方法。

我的启发式方法是尝试计算吃 bean 人到达 map 上每个有食物的点所需的最小可能距离。我当前的算法基本上是 Prim 的 MST,它让我的运行时间为 O(n logn),但没有考虑 pacman 需要跟随边缘进食以及返回到前一个顶点的情况...

还有更好的吗?

换句话说:在不提笔的情况下连接几个点的最小成本是多少?

谢谢

最佳答案

在运行全对最短路径算法并识别带有食物的顶点后,这变成了 traveling salesman problem .你不能有效地解决它,但你可以在多项式时间内构造任意好的解的近似值。您可能希望使用近似值,除非您可以预先计算所有内容。如果您可以预先计算事物(或以其他方式保证您有足够的时间找到精确的解决方案),那么一旦您获得了所有对的最短路径,您就可以简单地找到所有可能的最小总步行长度你吃食物的顺序排列。通过注意两个食物 block 之间的最短路径何时穿过另一个食物 block ,这种蛮力方法可能会有所改进。

关于algorithm - A* 启发式 : Shortest path passing once in multiple points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/918758/

相关文章:

java - Dijkstra算法对无向图的错误实现

javascript - 带有障碍物的寻路 javascript

c - 将数据保存到 malloc 的 2dim 数组在 C 中不起作用

c++ - opencv GCGRAPH(最大流)基于什么算法?

javascript - 如何检查二叉树的右侧。在树中搜索项目

python - CPython 中的字符串 'in' 运算符

algorithm - 有一些限制的最短路径算法

algorithm - 哪些应用程序/游戏状态 "delta compression"技术/算法确实存在?

prolog - 如何获得最强的路径序言?

java - Pacman 克隆,当在无法访问的方向按下按钮时,如何让 pacman 保持移动