База поиска путей - BFS

Расшифровка на секунду: BFSbreadth-first search, поиск в ширину. Не вглубь, а именно вширь: сначала обходишь всех соседей, потом соседей соседей, слоями, как круги на воде от камня. В визуализации на открытых плоскостях сложных это выглядит очень красиво.

Придумал, кстати, не один человек. Эдвард Мур в 1959 искал кратчайший путь из лабиринта для подопытных крыс, а через два года (не Брюс) Ли независимо описал то же самое — уже для трассировки проводников на платах. Друг о друге они даже не знали. В учебники алгоритм попал только в 70-х, когда его формализовали как общий обход графа, а до этого он существовал отдельно в каждой прикладной области - своё имя, своя статья.

Идея проще, чем звучит: берёшь стартовую точку, кладёшь в очередь, и на каждом шаге забираешь первого из очереди, смотришь его соседей, новых добавляешь в конец. Пока очередь не опустеет. Что зашло первым - то первым и обработалось, поэтому он слоеный. Как лук.

В реальном мире BFS почти везде, где нужен кратчайший путь без весов. LinkedIn считает степень связи между людьми именно так, второй круг, третий круг. Роутеры распространяют информацию о сети похожим образом, слой за слоем. Солвер для кубика Рубика перебирает состояния в ширину, чтобы гарантированно найти кратчайшее решение. Ну и кубер, конечно же, с NPC в играх туда же: обход зависимостей подов слой за слоем, поиск пути для NPC на клетчатой карте - все, что нужно. Для остального есть Дейкстра и Астар.

Лично я, наверное, одним из первых алгоритмов опробовал именно такой, когда трогал геймдев чуть серьезнее, чем маленькие демки. Забавно, что за 65 лет ничего лучше очереди не придумали.

База поиска путей - BFS
Расшифровка на секунду: BFS — breadth-first search, поиск в ширину | Сетка — социальная сеть от hh.ru