静态节点的A *寻路启发式算法

时间:2014-06-30 15:36:29

标签: c++ path-finding a-star

我正在尝试编写自己的A *寻路算法并遇到问题;当寻求最短的成本路径时,出现以下错误:

enter image description here

绿色填充节点是起始节点,红色填充节点是目标节点,粉红色填充节点是算法采用的实际路径。

这当然不是最短路径,我确定问题在于我的启发函数(曼哈顿距离):

int Map::manhattanDistance(Node evaluatedNode, Node goalNode)
{
    int x = evaluatedNode.xCoord - goalNode.xCoord;
    int y = evaluatedNode.yCoord - goalNode.yCoord;
    if(x + y < 0)
        return (x + y) * -1;
    else
        return x + y;
}

在我看来,曼哈顿距离公式在这里并不理想,因此我的问题是:其他距离测量算法对我有用吗?

编辑:为了清楚起见,每个节点的宽度由行/屏幕宽度= 640的节点数决定,每个节点的高度由列/屏幕高度= 480的节点数决定。

1 个答案:

答案 0 :(得分:1)

负成本意味着一条路线是免费的,或者更多的是它对之前的动作打折。看起来你试图通过乘以聚合的-1来解释这个问题,但损坏已经完成了。这就是解决方案使用了对角线的原因,(1 - 1)* -1仍为零,因此被认为是免费的。

我会用以下内容替换if语句,它通过分别对它应用abs来使用每个组件的大小:

返回Math.abs(x)+ Math.abs(y);