Топологическая сортировка: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) (→Ссылки) |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
Строка 2: | Строка 2: | ||
* Каждую вершину при выходе из DFS кладём в контейнер, который после переворачиваем (также можно использовать стек). | * Каждую вершину при выходе из DFS кладём в контейнер, который после переворачиваем (также можно использовать стек). | ||
vector<int> g | vector<vector<int>> g(n); | ||
bool | vector<bool> visited(n); | ||
vector<int> order; | vector<int> order; | ||
void dfs(int v) { | void dfs(int v) { | ||
visited[v] = 1; | |||
for (int | for (int to : g[v]) | ||
if (! | if (!visited[to]) | ||
dfs( | dfs(to); | ||
order.push_back(v); | order.push_back(v); | ||
} | } | ||
for (int | for (int v = 0; v < n; v++) | ||
if (!visited[v]) | |||
dfs(v); | |||
if (! | |||
dfs( | |||
reverse(order.begin(), order.end()); | reverse(order.begin(), order.end()); | ||
Строка 28: | Строка 26: | ||
* [http://e-maxx.ru/algo/topological_sort e-maxx.ru — Топологическая сортировка] | * [http://e-maxx.ru/algo/topological_sort 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_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8 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_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8 neerc.ifmo.ru/wiki — Использование обхода в глубину для топологической сортировки] | ||
* [http://brestprog. | * [http://brestprog.by/topics/topsort/ brestprog — Топологическая сортировка] | ||
* [http://algorithmica.org/tg/dfs-plus algorithmica.org — Продвинутый DFS] | * [http://algorithmica.org/tg/dfs-plus algorithmica.org — Продвинутый DFS] | ||
* [http://informatics.mccme.ru/course/view.php?id=6 informatics.mccme.ru — Курс «Алгоритмы на графах» — часть 2] | * [http://informatics.mccme.ru/course/view.php?id=6 informatics.mccme.ru — Курс «Алгоритмы на графах» — часть 2] |
Версия от 15:52, 15 февраля 2020
- Порядок топологической сортировки — порядок убывания времени выхода из вершины.
- Каждую вершину при выходе из DFS кладём в контейнер, который после переворачиваем (также можно использовать стек).
vector<vector<int>> g(n); vector<bool> visited(n); vector<int> order; void dfs(int v) { visited[v] = 1; for (int to : g[v]) if (!visited[to]) dfs(to); order.push_back(v); } for (int v = 0; v < n; v++) if (!visited[v]) dfs(v); reverse(order.begin(), order.end());
Ссылки на задачи
Ссылки
- e-maxx.ru — Топологическая сортировка
- neerc.ifmo.ru/wiki — Использование обхода в глубину для топологической сортировки
- brestprog — Топологическая сортировка
- algorithmica.org — Продвинутый DFS
- informatics.mccme.ru — Курс «Алгоритмы на графах» — часть 2
- Калинин П. Поиск в глубину
- Лахно А. Поиск в глубину и его применение
- algs4.cs.princeton.edu/lectures — 4.2 Directed Graphs
- VisuAlgo — Graph Traversal
- CodeLibrary — Topological sorting