Циклы в графе. Двудольность: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) (→Ссылки) |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
vector<int> g | vector<vector<int>> g(n); | ||
int | vector<int> visited(n); // 0 - ещё не были в вершине, 1 - вошли, но ещё не вышли из неё, 2 - уже обработали её | ||
void dfs(int v) { | void dfs(int v) { | ||
visited[v] = 1; | |||
for (int | for (int to : g[v]) { | ||
if ( | if (!visited[to]) | ||
/* граф содержит цикл */; | dfs(to); | ||
else if (visited[to] == 1) | |||
/* граф содержит цикл */; | |||
} | } | ||
visited[v] = 2; | |||
} | } | ||
for (int i = 0; i < | for (int i = 0; i < n; i++) | ||
if (!visited[i]) | |||
if (! | |||
dfs(i); | dfs(i); | ||
Версия от 15:28, 15 февраля 2020
vector<vector<int>> g(n); vector<int> visited(n); // 0 - ещё не были в вершине, 1 - вошли, но ещё не вышли из неё, 2 - уже обработали её void dfs(int v) { visited[v] = 1; for (int to : g[v]) { if (!visited[to]) dfs(to); else if (visited[to] == 1) /* граф содержит цикл */; } visited[v] = 2; } for (int i = 0; i < n; i++) if (!visited[i]) dfs(i);
Ссылки на задачи
Ссылки
- e-maxx.ru — Проверка графа на ацикличность и нахождение цикла
- neerc.ifmo.ru/wiki — Использование обхода в глубину для поиска цикла в ориентированном графе
- brestprog.neocities.org — Проверка графа на наличие циклов (рассматриваются циклы в неориентированных графах)
- brestprog.neocities.org — Двудольные графы. Проверка графа на двудольность
- algorithmica.org — Графы. Поиск в глубину
- algorithmica.org — Продвинутый DFS
- informatics.mccme.ru — Курс «Алгоритмы на графах» — часть 2
- Калинин П. Поиск в глубину
- Лахно А. Поиск в глубину и его применение
- VisuAlgo — Graph Traversal