Все темы
91

Подсчёт отдельных групп

Tier 1Закрыто

Где применяется

1. Задача

У тебя есть класс учеников и список, кто с кем дружит. Одни дружбы цепляются друг за друга и собирают большую компанию. Несколько учеников дружат втроём, в стороне от остальных. Один ученик не знает никого. Вопрос: сколько в классе отдельных кругов друзей?

Так же устроены подсчёт островов на карте и поиск несвязанных между собой кластеров в сети. У тебя есть граф (точки, соединённые линиями), и он может состоять из нескольких кусков. Между кусками нет ни одного ребра. Нужно узнать, сколько этих кусков.

В уроках про BFS и DFS ты обходил граф от одного старта. Один обход доходит до всех узлов своего куска и ни до одного узла чужого. Значит, кусков столько, сколько обходов нужно, чтобы побывать в каждом узле.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит
Подсчёт компонент связности
countComponents(7, {0: [1, 2], 1: [0, 2], 2: [0, 1], 3: [4], 4: [3, 5], 5: [4], 6: []})
число над вершиной = номер её компоненты
stack (стек)
пусто
start = 0count = 0

Считаем отдельные группы среди 7 вершин. Одно множество visited живёт весь запуск и не сбрасывается.

Как узнать

Компоненты связности (Connected components)

Эти слова в условии значат этот паттерн

  • посчитать число отдельных групп/островов/кластеров
  • граф может быть несвязным
  • сколько связных частей
  • круги друзей
  • разметить связные области

Похоже, но не то

V вершин и E рёбер дают в сумме O(V + E). Каждую вершину посещает ровно один обход.

На LeetCode

Задачи, где нужно посчитать отдельные группы, например острова, круги друзей или сети. Пройди по всем узлам, и каждый ещё не посещённый узел начинает новую группу, которую один обход отмечает целиком.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности