Найдите две самые дальние ячейки в сетке с препятствиями - PullRequest
0 голосов
/ 24 января 2019

Не имея определенной начальной ячейки, как найти две самые дальние ячейки в сетке с препятствиями (стенами и т. Д.) Наиболее эффективным способом?

Не обязательно должен быть идеальный результат, может быть приближением, если он достаточно хорош.

Если вы знаете, как, я люблю вас.

1 Ответ

0 голосов
/ 01 февраля 2019
  1. Выполните 8-сторонний алгоритм заполнения ковша, чтобы найти мертвых.

Чтобы минимизировать количество мертвых объектов, добавьте сначала кардиналов в очередь, а затем первичные межкардиналы (диагонали).Также следите за последней мертвой областью, и если вы обнаружите новую мертвую область слишком близко к последней, вы удалите последнюю и сохраните новую найденную.На больших картах вы также можете рассчитать расстояние Манхэттена от тупика до центра карты, и если оно слишком короткое, вы просто не добавляете тупик.

Теперь просто A * каждая точка в любой другой точке.

Поскольку вы проверяете каждый путь дважды (от p1 до p2, затем от p2 до p1), как только вы проверяете от p1 до p2, вы также можете зарегистрировать p2 до p1 на летучей мыши с тем же расстоянием, чтобы вдвое сократить количество раз.вам нужно сделать поиск A *.Время, необходимое для выполнения поиска A *, можно рассчитать как number of deadends * (number of deadends - 1) / 2.

...