【问题标题】:A* only works in certain casesA* 仅在某些情况下有效
【发布时间】:2014-01-17 00:57:46
【问题描述】:

我的 a* 寻路算法仅适用于某些情况,但我不明白为什么。我网格中的每个节点都是可步行的,因此理论上每条路径都应该有效。我相信错误在这一行:

 PathFindingNode *neighbor = NULL;
            if ((y > 0 && x > 0) && (y < gridY - 1 && x < gridX - 1))
             neighbor = [[grid objectAtIndex:x + dx] objectAtIndex:y +dy];

【问题讨论】:

    标签: ios objective-c path-finding shortest-path a-star


    【解决方案1】:

    在函数-(void)addNeighbors:中,一行

    if ((y > 0 && x > 0) && (y < gridY - 1 && x < gridX - 1))
        neighbor = [[grid objectAtIndex:x + dx] objectAtIndex:y +dy];
    

    有错误,因为如果curNode 在边界上,它不会将邻居添加到队列中。这样算法永远不会在四个角达到endNode(即[0,0], [gridX-1,0], [0,gridY-1], [gridX-1,gridY-1])。

    【讨论】:

    • 感谢您指出这一点,如果可以的话,我会支持您,但我没有足够的声誉。这是您在深夜盯着某物 6 小时后错过的那些错误之一!对于那些感兴趣的人,我将我的节点邻居存储在节点类本身中,因此当我检查邻居时,我不需要使用双 for 循环,我可以围绕给定的节点邻居数组进行循环。再次感谢伙计!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多