В настоящее время я использую алгоритм поиска пути A * для вычисления пути на бесконечной сетке (используя UnboundedGrid в Gridworld, пример AP CS, если это кому-нибудь поможет).Все работает замечательно, за исключением случаев, когда нет действительного пути, потому что конечный узел полностью окружен стенами.Как и ожидалось, алгоритм продолжает поиск бесконечно, никогда не находя конечного узла.
Возможное решение этой проблемы - разместить невидимые (как пользователь их не видит, но алгоритм видит) стены вокругвсю область поиска пути, убедившись, что начальный узел, конечный узел и все узлы стены находятся внутри этих стен, с заполнением 2-3 пробелами или около того.Что-то вроде:
_________________________________
| |
| S | |
| _____| _____ |
| | E | |
| |___| |
|_______________________________|
... идея состоит в том, что в конечном итоге все узлы будут добавлены в закрытый список, открытый список станет пустым, и в этот момент я буду знать, что действительного пути не существует.
Похоже ли это на разумное решение проблемы?Есть ли способы, которыми это могло бы пойти не так?Я понимаю, что другое решение состоит в том, чтобы одновременно находить пути назад от конца, но кажется, что это может быть потенциально дорого, особенно в тех случаях, когда конечный узел не так плотно закрыт.