我最近一直在研究跳转点搜索(JPS)路径搜索算法,但我并不完全了解最终路径是如何选择的。
在A *中,所有父节点都在关闭列表中,并且在目标成为父节点后,它将通过关闭列表追溯。在目标节点成为关闭列表中的父节点之前,将不会计算路径,然后该关闭列表将跟踪与其相关的关闭列表中的父节点。
如果跳过网格中的大多数节点,JPS如何实现这一点。 A *通过它计算的每个节点返回,但JPS不能这样做吗?
JPS在封闭列表中没有父节点列表,所以它只是将路径从一个节点连接到另一个节点即ie。它从一个节点到另一个节点绘制一条线,该节点距离一个节点到另一个节点,而不是从一个节点到另一个节点的线路?
我已经阅读了有关该主题的所有Harabor和Grastien的论文,所以请不要给我链接,因为我不明白他们解释它的方式:)
如果你可以向我解释这一点,那么你非常感谢:)
答案 0 :(得分:1)
你需要记住的是JPS仍然是A *。唯一的区别是,它不是总是扩展当前节点的所有邻居,而是仅考虑它们的一个子集。 因此,您需要跟踪跳转节点的父级。在这里,您必须将父级视为您必须经历的节点才能到达当前节点。在A *中,这将始终是相邻节点。在JPS中,这通常是一个节点,比你领先许多步骤。然而,这些步骤将始终沿着一个特定的运动矢量。要找到节点与其父节点之间的“路径”,您只需根据它们之间的规范化移动向量继续从一个节点到另一个节点。
例如,您有一个父节点(2,0)的节点(5,3)。 node - parent给你(3,3),规范化后给你步骤(1,1)。在这种情况下,沿着(1,1)采取3个对角线步长,或者换句话说,采用正x和正y,将你从父节点带到节点。