A * работает только в определенных случаях


Мой алгоритм поиска пути a * работает только для определенных случаев, но я не понимаю, почему. Каждый узел в моей сетке проходим, поэтому теоретически каждый путь должен работать. Я считаю, что ошибка в этой строке:

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

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]).