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 ответ:
В функции
-(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]).