Максимальный поток (Эдмондс-Карп)
Сколько прокачается через сеть с узкими местами: BFS-пути насыщают рёбра.
1function edmondsKarp(edges: Edge[], s: string, t: string): number {2 // остаточные пропускные способности3 const cap = new Map<string, number>()4 for (const e of edges) {5 cap.set(e.from + ':' + e.to, e.weight)6 cap.set(e.to + ':' + e.from, cap.get(e.to + ':' + e.from) ?? 0)7 }8 9 let flow = 010 for (;;) {11 // BFS ищет кратчайший увеличивающий путь12 const parent = new Map<string, string>()13 const queue = [s]14 const seen = new Set([s])15 while (queue.length > 0 && !parent.has(t)) {16 const v = queue.shift()!17 for (const w of neighbors(v)) {18 if (!seen.has(w) && (cap.get(v + ':' + w) ?? 0) > 0) {19 seen.add(w)20 parent.set(w, v)21 queue.push(w)22 }23 }24 }25 if (!parent.has(t)) return flow // пути нет — поток максимальный26 27 // узкое место пути28 let bottleneck = Infinity29 for (let v = t; v !== s; v = parent.get(v)!) {30 bottleneck = Math.min(bottleneck, cap.get(parent.get(v)! + ':' + v)!)31 }32 for (let v = t; v !== s; v = parent.get(v)!) {33 cap.set(parent.get(v)! + ':' + v, cap.get(parent.get(v)! + ':' + v)! - bottleneck)34 cap.set(v + ':' + parent.get(v)!, cap.get(v + ':' + parent.get(v)!)! + bottleneck)35 }36 flow += bottleneck37 }38}Проблема
Сколько прокачается через сеть с узкими местами: BFS-пути насыщают рёбра.
Что вы видите
Каждая итерация: BFS находит путь с остаточной пропускной способностью; узкое место добавляется к потоку.
Как это работает
Остаточная сеть: прямые рёбра теряют, обратные приобретают пропускную способность (можно «отменить» поток). Когда увеличивающего пути нет — поток максимален, а насыщенный разрез это доказывает.
Пошаговый разбор
- 01
BFS-путь
Кратчайший с остатком > 0.
- 02
Узкое место
Минимальная остаточная способность.
- 03
Насыщение
Пути нет — поток максимален.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Логистика
Пропускная способность труб и дорог.
Паросочетания
Распределение задач и исполнителей.
Изображения
Segmentation через min-cut.
Связанные алгоритмы
«Узкое место сети: теорема о макс. потоке»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.