В этом параграфе вы научитесь находить компоненты связности в неориентированном графе — группы вершин, внутри которых существует путь между любыми двумя. Эта задача возникает, например, при анализе социальных сетей, компьютерных сетей или при кластеризации данных. Мы разберём, как с помощью обхода в глубину (DFS) и в ширину (BFS) выделять такие компоненты и как эффективно реализовать алгоритм даже для больших графов.
Ключевые вопросы параграфа
- Что именно называют компонентой связности в неориентированном графе?
- Как применить DFS и BFS, чтобы выделить все компоненты?
- Зачем обход нужно запускать от каждой непосещённой вершины?
Применение алгоритмов поиска в глубину и ширину
Алгоритмы поиска в глубину и ширину находят широкое применение и могут использоваться в других алгоритмах. Рассмотрим один из таких алгоритмов для поиска компонент связности в графе. Под компонентой связности в графе понимают множество вершин графа достижимых попарно и рёбра их связывающие. Для поиска компонент связности необходимо из каждой не посещённой вершины запускать алгоритм обхода, накапливая результаты каждого в отдельный контейнер. Пример ниже поможет понять алгоритм.

Асимптотическая сложность нахождения компонент связности в графе — O(V+E), где V — число вершин, а E — число рёбер и дуг.
Упражнение
Попробуйте реализовать данный алгоритм.
Что дальше
Теперь вы умеете находить компоненты связности в графе и применять для этого DFS или BFS. Вы поняли, почему одного обхода недостаточно и как обойти весь граф по частям.
Далее — более сложные задачи, в которых нужно находить кратчайшие пути между вершинами. Вы узнаете, как работает алгоритм Дейкстры и в каких ситуациях его можно применять.
А пока вы не ушли дальше — закрепите материал на практике:
- Отметьте, что урок прочитан, при помощи кнопки ниже.
- Пройдите мини-квиз, чтобы проверить, насколько хорошо вы усвоили тему.
- Перейдите к задачам этого параграфа и потренируйтесь.
- Перед этим — загляните в короткий гайд о том, как работает система проверки.
Хотите обсудить, задать вопрос или не понимаете, почему код не работает? Мы всё предусмотрели — вступайте в сообщество Хендбука! Там студенты помогают друг другу разобраться.
Ключевые выводы параграфа
- Компоненты связности — это группы вершин неориентированного графа, внутри которых существует путь между любыми двумя вершинами.
- Чтобы найти все компоненты, используют обход графа: в глубину (Depth-First Search, DFS) или в ширину (Breadth-First Search, BFS), начиная каждый раз с новой не посещённой вершины.
- Важно правильно отмечать посещённые вершины и учитывать номер компоненты, к которой они принадлежат.
- Выделение компонент связности помогает понять структуру графа и служит основой для последующего анализа и алгоритмов кластеризации.