Поиск в глубину DFS
Поиск в глубину (DFS) - это один из основных алгоритмов на графах. Алгоритм работает за O(N + M).
 
Алгоритм
Для начала мы запускаемся от вершины, рассматриваем детей этой вершины, и если мы никогда в них не заходили, то запускаем от них DFS.


Поиск в глубину DFS
Поиск в глубину (DFS) - это один из основных алгоритмов на графах. Алгоритм работает за O(N + M).
 
Алгоритм
Для начала мы запускаемся от вершины, рассматриваем детей этой вершины, и если мы никогда в них не заходили, то запускаем от них DFS.


Двудольный граф
 
Двудольный граф - граф, вершины которого можно разбить на два множества так, что каждое ребро соединяет вершины из разных множеств.


Часто в контексте двудольных графов используется понятие цвета вершины. Разбитие графа на две доли называется покраской его вершин в два различных цвета. Каждое ребро должно соединять вершины различного цвета.

Для проверки графа на двудольность и разбития его на доли чаще всего используется DFS
 

Алгоритм

Начинаем покраску с произвольной вершины, которую красим в произвольный цвет.
При прохождении по каждому ребру красим следующую вершину в противоположный цвет.
Если при переборе соседних вершин мы нашли вершину, уже покрашенную в тот же цвет, что и текущая, то в графе существует нечётный цикл, а значит, он не является двудольным.

Алгоритм можно описать следующим образом:
Дан ориентированный граф с n вершинами и m рёбрами. Требуется перенумеровать его вершины таким образом, чтобы каждое рёбро вело из вершины с меньшим номером в вершину с большим.
Иными словами, требуется найти перестановку вершин (топологический порядок), соответствующую порядку, задаваемому всеми рёбрами графа.
Будем использовать обход в глубину (dfs(v))
Если мы будем в момент выхода из \(dfs(v)\) добавлять нашу вершину в начало некоего списка, то в конце концов в этом списке получится топологическая сортировка.
Таким образом, искомая топологическая сортировка — это сортировка в порядке убывания времён выхода.

Деревья

Дерево - это связный граф без простых циклов. В дереве нельзя удалить ни одно ребро, чтобы граф остался связным, поэтому дерево является минимальным связным графом.
 

Деревьями называются определенные типы связных графов. Вот несколько определений деревьев:

  1. Деревом называется связный граф, который не содержит простых циклов. Это означает, что нельзя пройти от одной вершины к другой по ребрам графа и вернуться в исходную вершину, не проходя при этом по какому-либо ребру дважды.

  2. Деревом называется связный граф, содержащий (n) вершин и ровно (n-1) ребро.

  3. Деревом называется связный граф, который становится несвязным при удалении любого ребра. Это означает, что каждое ребро в дереве является неотъемлемой частью поддержания связности графа.

  4. Деревом называется граф, в котором любые две вершины соединены единственным простым путем. Простой путь - это путь, который не проходит по одному и тому же ребру более одного раза.

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