Поиск в глубину 2 (?? января 2024)
- Разбираем код dfs-а
- Инкапсуляция графа, struct
- Локальные функции, function
- Рёбра − list initialization
- Проверка внутри или снаружи
- Цикл for
- Инкапсуляция через struct
- Константы
- [6 минут] Раскраски
- Покраска в 2 цвета.
- В 3 цвета = трудно (умеют только за экспоненту). В минимальное число цветов, тем более.
- Но как всё-таки действовать? жадный алгоритм за O(V+E) через удаление вершины минимальной степени
- [20 минут] Эйлеровость
- Критерий эйлеровости для ор и неор
- Доказательство и элементарный алгоритм поиска пути:
выделим цикл жадным циклом for (идём вглубь до упора), по индукции сделаем из каждой компоненты оставшихся рёбер Эйлеровы цикл, склеим.
- Алгоритм поиска для орграфа за O(V+E) одним dfs (
result.push_back(e);
на выходе из dfs)
- Алгоритм поиска для неорграфа отличается тем, что после прохода по ребру нужно удалить парное пройденному.
Удаляем лениво: is_deleted[edge.index] = true;
- Картинки с примерами (почему важен цикл while, почему важно удалять ребро)