Ты не ОБОЙДЕШЬ!
На эту неделю у нас большая практика к трём важным теориям по обходам графов:
- 12.1 Поиск в глубину (Depth-First Search) — https://olprog.ru/articles/olprog/graphs/traversal/dfs/
- 12.2 Поиск в ширину (Breadth-First Search) — https://olprog.ru/articles/olprog/graphs/traversal/bfs/
- 12.3 Применения обхода графа — https://olprog.ru/articles/olprog/graphs/traversal/components/
Это один из самых важных блоков в изучении графов. Именно здесь появляются базовые инструменты, без которых дальше почти невозможно двигаться: обход графа в глубину, обход в ширину, поиск компонент связности, работа с расстояниями в невзвешенном графе, анализ сеток, лабиринтов и разных моделей перемещения.
После этих тем графы перестают быть просто набором вершин и рёбер и начинают превращаться в полноценный рабочий инструмент для решения задач.
Практика к теме:
- Ключи старой башни — https://judje.olprog.ru/problem/oldtowerkeys
- Острова пепельного моря — https://judje.olprog.ru/problem/ashenislands
- Мозаика светящихся плит — https://judje.olprog.ru/problem/glowingmosaic
- Тревога в железной крепости — https://judje.olprog.ru/problem/ironalarm
- Побег из подземных тоннелей — https://judje.olprog.ru/problem/tunnelescape
- Ледяная дорога каравана — https://judje.olprog.ru/problem/icecaravan
- Огонь в квартале мастеров — https://judje.olprog.ru/problem/craftfire
- Провинции северной империи — https://judje.olprog.ru/problem/northprovinces
- Кварталы медного города — https://judje.olprog.ru/problem/copperdistricts
- Катки зимнего фестиваля — https://judje.olprog.ru/problem/winterfestival
- Лес древних духов — https://judje.olprog.ru/problem/spiritforest
- Кольца большого мегаполиса — https://judje.olprog.ru/problem/cityrings
- Путь королевского гонца — https://judje.olprog.ru/problem/royalroute
Эта подборка подойдёт тем, кто хочет:
- уверенно освоить DFS и BFS на практике;
- научиться искать компоненты связности;
- потренироваться на графах, сетках, картах, лабиринтах и дорожных моделях;
- начать различать, когда задачу удобнее решать через DFS, а когда через BFS;
- закрепить базу, которая понадобится почти во всех следующих графовых темах.
Во время решения особенно полезно обращать внимание на такие вопросы:
- что в задаче является вершинами и рёбрами;
- нужно ли просто обойти всё достижимое или ещё и найти кратчайшее расстояние;
- достаточно ли DFS для проверки связности, или здесь важен именно BFS по уровням;
- есть ли в задаче несколько компонент;
- не сводится ли условие к обходу по клеткам в таблице.
Рекомендуем идти так: сначала прочитать теорию, затем решать задачи по нарастающей, стараясь каждый раз отдельно проговаривать, почему здесь нужен именно такой обход. Очень важно не просто написать код, а научиться узнавать структуру задачи: где перед вами обычный обход графа, где поиск расстояний, а где задача на компоненты связности.
Если решение не находится сразу, полезно начать с маленького рисунка или вручную проследить порядок обхода на небольшом примере. Для графовых задач это часто быстрее любого долгого размышления «в голове».
Удачи в решении!
Ждём ваши результаты, вопросы и впечатления от задач.
Комментарии