具有节点优先级的*寻路寻路

时间:2014-02-16 12:50:11

标签: c algorithm path-finding maze pacman

我正在尝试寻找具有特定起点和放大器的迷宫中的最短路径。结束点,迷宫被建成一个2D表(行和列),当你在表中的某些单元格中无法通过时(“墙”), 到目前为止,A *算法运行良好,当特定细胞具有更好'重量'然后其他细胞时问题就开始了。 例如,采取3 * 3迷宫:

  • 起点1 * 1
  • 结束点3 * 3
  • 1 * 3的单元格与其他单元格相比具有更好的权重,这意味着如果最终你有相同的路径,你最好通过这个单元格

所以通过A *它甚至不会让1 * 3细胞了解它有更好的重量!

是否有解决该问题的方法?

谢谢!

1 个答案:

答案 0 :(得分:4)

创建代表迷宫G=(V,E)的图表。

使用权重函数为图中的边创建一个新的加权图:

w(u,v) = 1                if v is "not important"
         1-1/(n+1)        if v is important.
(n is the total number of vertices/cells in your maze).

现在,请注意,通过v的路径比不通过它的路径“更好”(更短),但仍然更短(远距离)路径。

您现在可以使用A *修改启发式功能:

h'(v) = h(v)*[1-1/(n+1)]  [where h(v) is the original admissible heuristic you had]

注意:忽略评论,如果您有一个可接受的启发式功能,Dijsktra的算法不如A *,而且看起来像是这样。