Заливка (Flood Fill)
Закрасить связную область: волна от точки, стены не перепрыгнуть.
1function floodFill(2 map: string[],3 visited: boolean[][],4 row: number,5 col: number,6): number {7 const stack: Array<[number, number]> = [[row, col]]8 let filled = 09 10 while (stack.length > 0) {11 const [r, c] = stack.pop() as [number, number]12 if (r < 0 || r >= map.length) continue13 if (c < 0 || c >= map[0].length) continue14 if (map[r][c] === '#' || visited[r][c]) continue15 16 visited[r][c] = true17 filled++18 19 stack.push([r + 1, c], [r - 1, c], [r, c + 1], [r, c - 1])20 }21 22 return filled23}Проблема
Закрасить связную область: волна от точки, стены не перепрыгнуть.
Что вы видите
Сетка-лабиринт: заливка расходится от старта, заливая всё достижимое.
Как это работает
Инструмент «ведро» в Paint. Обход в глубину/ширину по клеткам: стек соседей, посещённые не повторяем.
Пошаговый разбор
- 01
Старт
Клетка-источник и её соседи.
- 02
Волна
Соседи соседей — пока не стены.
- 03
Финал
Залита вся связная область.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Пустой вход
Корректно завершается без лишних шагов.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
Связанные алгоритмы
«Как работает «ведро» в Paint»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.