13. Графы: определения, обходы и кратчайшие пути

Графы — одна из наиболее универсальных структур данных. Они моделируют транспортные сети, социальные связи, зависимости между задачами, структуру интернета и многие другие объекты.

В этом разделе мы изучим:

Определение

Граф $G = (V, E)$ задаётся множеством вершин $V$ и множеством рёбер $E$. В ориентированном графе ребро — упорядоченная пара $(u, v)$; в неориентированном — неупорядоченная $\{u, v\}$.

Свойства

Основные свойства графов:

  1. $\sum_{v \in V} \deg(v) = 2|E|$ (для неориентированных графов).
  2. Связный граф с $n$ вершинами содержит не менее $n - 1$ рёбер.
  3. Дерево — связный граф без циклов — имеет ровно $n - 1$ рёбер.
  4. Планарный граф: $|E| \leqslant 3|V| - 6$ (теорема Эйлера).

Сводка алгоритмов

Алгоритм Задача Время
DFS Обход, компоненты $O(V + E)$
Топологическая сортировка Порядок в DAG $O(V + E)$
Косарайю (SCC) Сильная связность $O(V + E)$
Мосты / точки сочленения Двусвязность $O(V + E)$
BFS Кратчайшие пути (невзв.) $O(V + E)$
Дейкстра Кратчайшие пути ($w \geqslant 0$) $O((V+E) \log V)$
Беллман-Форд Кратчайшие пути (любые $w$) $O(VE)$
Флойд Все пары $O(V^3)$