Циклы в графе. Двудольность: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) Нет описания правки |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
== TLDR == | |||
<youtube width="300" height="180">pB83tSvoBuc</youtube> | |||
<youtube width="300" height="180">8QFS6AC0WeI</youtube> | |||
void dfs(int v) { | |||
== Код == | |||
void dfs(vector<vector<int>> &graph, int v, vector<int> &visited) { | |||
visited[v] = 1; | visited[v] = 1; | ||
for (int to : | for (int to : graph[v]) { | ||
if (!visited[to]) | if (!visited[to]) | ||
dfs(to); | dfs(graph, to, visited); | ||
else if (visited[to] == 1) | else if (visited[to] == 1) | ||
/* граф содержит цикл */; | /* граф содержит цикл */; | ||
Строка 13: | Строка 15: | ||
} | } | ||
for (int | for (int v = 0; v < graph.size(); v++) | ||
if (!visited[ | if (!visited[v]) | ||
dfs( | dfs(graph, v, visited); | ||
== Ссылки на задачи == | == Ссылки на задачи == | ||
Строка 25: | Строка 27: | ||
* [http://e-maxx.ru/algo/finding_cycle e-maxx.ru — Проверка графа на ацикличность и нахождение цикла] | * [http://e-maxx.ru/algo/finding_cycle e-maxx.ru — Проверка графа на ацикличность и нахождение цикла] | ||
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0_%D0%B2_%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC_%D0%B3%D1%80%D0%B0%D1%84%D0%B5 neerc.ifmo.ru/wiki — Использование обхода в глубину для поиска цикла в ориентированном графе] | * [http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0_%D0%B2_%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC_%D0%B3%D1%80%D0%B0%D1%84%D0%B5 neerc.ifmo.ru/wiki — Использование обхода в глубину для поиска цикла в ориентированном графе] | ||
* [http://brestprog. | * [http://brestprog.by/topics/graphcycles/ brestprog — Проверка графа на наличие циклов] (рассматриваются циклы в неориентированных графах) | ||
* [http://brestprog. | * [http://brestprog.by/topics/bipartite/ brestprog — Двудольные графы. Проверка графа на двудольность] | ||
* [http://algorithmica.org/tg/dfs algorithmica.org — Графы. Поиск в глубину] | * [http://algorithmica.org/tg/dfs algorithmica.org — Графы. Поиск в глубину] | ||
* [http://algorithmica.org/tg/dfs-plus algorithmica.org — Продвинутый DFS] | * [http://algorithmica.org/tg/dfs-plus algorithmica.org — Продвинутый DFS] |
Текущая версия от 15:15, 24 мая 2023
TLDR
Код
void dfs(vector<vector<int>> &graph, int v, vector<int> &visited) { visited[v] = 1; for (int to : graph[v]) { if (!visited[to]) dfs(graph, to, visited); else if (visited[to] == 1) /* граф содержит цикл */; } visited[v] = 2; } for (int v = 0; v < graph.size(); v++) if (!visited[v]) dfs(graph, v, visited);
Ссылки на задачи
Ссылки
- e-maxx.ru — Проверка графа на ацикличность и нахождение цикла
- neerc.ifmo.ru/wiki — Использование обхода в глубину для поиска цикла в ориентированном графе
- brestprog — Проверка графа на наличие циклов (рассматриваются циклы в неориентированных графах)
- brestprog — Двудольные графы. Проверка графа на двудольность
- algorithmica.org — Графы. Поиск в глубину
- algorithmica.org — Продвинутый DFS
- informatics.mccme.ru — Курс «Алгоритмы на графах» — часть 2
- Калинин П. Поиск в глубину
- Лахно А. Поиск в глубину и его применение
- VisuAlgo — Graph Traversal