【问题标题】:A* pathfinding with nodes priority具有节点优先级的 A* 寻路
【发布时间】:2014-03-15 16:50:32
【问题描述】:

我正在尝试在具有特定起点和终点的迷宫中寻找最短路径,当在表格中的某些单元格中您无法通过时,迷宫被构建为 2D 表格(行和列)( “墙”), 到目前为止一切都很好并且 A* 算法运行良好,当特定单元格比其他单元格具有 更好的“权重” 时,问题就开始了。 以3*3迷宫为例:

  • 起点1*1
  • 终点3*3
  • 1*3 处的单元格比其他单元格的权重更好,这意味着如果最终你有相等的溃败,你最好通过这个单元格

所以通过 A* 它甚至不会让 1*3 单元了解它具有更好的权重!

这个问题有解决办法吗?

谢谢!

【问题讨论】:

  • ^ 这将是我的答案
  • @HenkHolterman , user2144097 - Dijkstra 的算法,基本上是 H(v) = 0 的 A*。所以,如果你有一个很好的启发式函数 - dijkstra 不如 A*。
  • @user2144097 - 你可以问我们,但为什么不问谷歌或维基百科?
  • @HenkHolterman 我不同意你的最后评论。这不是一个经典的“如何解决迷宫”问题。 OP 已经有一个迷宫求解器,他想知道如何添加“重要节点”的新方面,如果可能的话,该方面应该受到算法的青睐。在这个领域需要大量经验来思考这个查询的正确关键字是什么,IMO。

标签: c algorithm path-finding maze pacman


【解决方案1】:

创建代表您的迷宫的图形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]

注意:忽略 cmets,如果你有一个可接受的启发式函数,Dijsktra 的算法不如 A*,而且看起来你确实有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多