Простой поиск в ширину / поиск в глубину будет работать, хотя и медленно. Обязательно не позволяйте боту проверять пути, которые имеют один и тот же квадрат несколько раз, так как это приведет к тому, что эти алгоритмы будут работать намного дольше в стандартных случаях и бесконечно в случае невозможности достижения флага.
A * - более элегантный подход, особенно если вы знаете расположение флага относительно себя. Википедия , как обычно, неплохо справляется с объяснением. Классическая эвристика, которую следует использовать, - это расстояние до места назначения (количество ходов без каких-либо препятствий).
Эти алгоритмы полезны для обратной поездки - не столько для части «поиск флага».
Edit:
Эти подходы включают создание объектов, представляющих квадраты на карте, и создание «путей» или серий квадратов для удара (или шагов, которые необходимо предпринять). После того, как вы построите структуру для представления вашего квадрата, проблема того, какой тип поиска использовать, становится гораздо менее сложной задачей.
Этот класс должен иметь возможность получить список соседних квадратов и знать, можно ли его пройти.
Учитывая, что у вас нет всей информации, попробуйте просто считать неисследованные фрагменты доступными и пересчитайте их, если обнаружите, что их нет.
Edit:
Что касается поиска неизвестного места для неизвестного объекта ...
Вы можете использовать что-то вроде Алгоритм залога , пока не найдете границы своего пространства, записывая всю информацию на ходу. Затем посмотрите на все невидимые квадраты, используя ваш любимый алгоритм дрейфа / поиска пути. Если в какой-то момент пути вы видите флаг, остановите то, что вы делаете, и используйте ваш любимый алгоритм поиска пути, чтобы вернуться домой.