A *多个节点共享相同的成本

时间:2014-06-20 00:21:45

标签: java a-star

所以我目前正在使用A *为我的游戏寻找路径,目前它制作了路径,但路径非常不正确。我会粗略地画出它创造的路径:

Start Node
   Second Node
        Third Node
            Fourth Node    Sixth Node
                    Fifth Node     Seventh Node
                                        Eighth Node   Tenth Node
                                             Ninth Node     Eleventh Node
                                                                    End Node

在使用调试器之后,我确定在第五个节点,右上,右和右右节点都共享完全相同的fCost。在这一点上,我只能假设它与我的getH函数的结果有关。这是:

public int getH(int row, int col, Node goal)
{
    return (int)Math.sqrt((goal.row - row) * (goal.row - row) + (goal.col - col) * (goal.col - col));
}

所以我的问题是,我在这里做错了什么?

在较小的测试(较少的节点)上,我不会遇到只使用对角线的问题。此外,没有实现绕过障碍的功能,所以这不是正在发生的事情。

1 个答案:

答案 0 :(得分:2)

您使用整数来计算成本。通过将平方根的结果转换为int,您基本上可以抛弃重要性。转换为int与舍入不同。所以在这种情况下:

getH(...): 4.9 --> 4
getH(...): 4.1 --> 4

在这两种情况下,这些成本将成为相同的价值。使用双打来比较解决此问题的成本。

相关:How to cast a double to an int in Java by rounding it down?