在一颗星中回溯

时间:2015-02-04 07:44:45

标签: algorithm search a-star

蓝墙

绿色突出显示的单元格=打开列表

红色突出显示的单元格=已关闭列表

enter image description here

您好,有谁能告诉我如何在星型搜索算法中实现回溯? 我根据wiki实现了星级搜索,但它没有回溯,我的意思是回溯是开放列表(绿色单元格)包含2,0和3,3,如图所示,到达时当前节点将跳过"跳跃"由于成本现在超过3,3并从那里继续搜索,如何做到如此以便它将从2,0-> 2,1-> 2,2 ...一直回到3,3并从那里开始搜索?

2 个答案:

答案 0 :(得分:3)

您的图片就像二维网格地图

但是您的文字提示方法,这有点令人困惑。

  • 对于2D网格地图,路径上的单元格之间的成本必须不同

你在那里得到了太多的{​​{1}},因此你无法回溯这条路。您必须增加或减少每个步骤的成本,并仅填充最近填充的单元格附近的单元格。这可以通过在大地图上递归或通过扫描整个地图或边界框来完成小地图上的最后填充数字来完成。

回溯

可以通过在A *填充之后扫描起始/结束单元的邻居来完成,总是移动到最小/最大成本

example

在此示例中,从cost=100开始填充,直到(2,0)被点击,然后回溯(3,3) (3,2)到最低成本(始终为{ {1}}用于增量填充)。如果您需要反向顺序的路径,则从cost=8开始填充......

<强>加速

有时双重灌装加快了过程:从两端开始灌装并在加入时停止。要识别从哪个点填充哪个单元格,您可以使用正值和负值,或者使用足够大的成本范围。

答案 1 :(得分:0)

您可以跟踪两个节点的后退指针,直到您到达共同的祖先(0,2),然后打印从(2,0)跟随时访问的节点,然后是跟随时访问的节点(3) ,3),反向印刷。

要查找A *搜索树中两个节点的共同祖先,只需维护两个“当前节点”,然后按照g-cost较高者的后向指针,直到两个当前节点位于同一位置

值得一提的是,这是一件很奇怪的事情。 A *不是基于堆栈的遍历,因此它不会回溯。