DEV//UNIT

Двудольность графа

Можно ли разбить вершины на две доли без рёбер внутри доли — BFS-раскраской.

время O(V + E)память O(V)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function isBipartite(graph: Map<string, string[]>): boolean {
2 const color = new Map<string, 0 | 1>()
3
4 for (const start of graph.keys()) {
5 if (color.has(start)) continue
6 color.set(start, 0)
7
8 const queue = [start]
9 while (queue.length > 0) {
10 const v = queue.shift() as string
11 for (const next of graph.get(v) ?? []) {
12 if (!color.has(next)) {
13 color.set(next, color.get(v) === 0 ? 1 : 0)
14 queue.push(next)
15 } else if (color.get(next) === color.get(v)) {
16 return false // соседи одного цвета — нечётный цикл
17 }
18 }
19 }
20 }
21
22 return true
23}

Проблема

Можно ли разбить вершины на две доли без рёбер внутри доли — BFS-раскраской.

Что вы видите

Раскраска в два цвета: соседи получают противоположный; конфликт — нечётный цикл.

Как это работает

Граф двудолен ⇔ нет нечётных циклов. Распределение задач исполнителям, паросочетания, проверка «кто с кем не должен быть в одной группе».

Пошаговый разбор

  1. 01

    Цвет

    Стартовая вершина — цвет 0.

  2. 02

    Соседи

    Противоположный цвет.

  3. 03

    Конфликт

    Соседи одного цвета — нет.

Complexity и ограничения

time
O(V + E)
space
O(V)

См. complexity в шапке страницы.

Edge cases

  • Пустой вход

    Корректно завершается без лишних шагов.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Продукт

Классический приём в реальных системах.

Собеседования

Стандартный вопрос на понимание структуры.

Связанные алгоритмы

Shorts

«Две команды без внутренних конфликтов»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Две команды без внутренних конфликтов
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/bipartite-check