Топологическая сортировка

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
  • Порядок топологической сортировки — порядок убывания времени выхода из вершины.
  • Каждую вершину при выходе из DFS кладём в контейнер, который после переворачиваем (также можно использовать стек).
vector<int> g[V_CNT];
bool u[V_CNT];
vector<int> order;

void dfs(int v) {
    u[v] = 1;
    for (int i = 0; i < g[v].size(); i++)
        if (!u[g[v][i]])
            dfs(g[v][i]);
    order.push_back(v);
}

for (int i = 0; i < V_CNT; i++)
    u[i] = 0;
for (int i = 0; i < V_CNT; i++)
    if (!u[i])
        dfs(i);
reverse(order.begin(), order.end());

Ссылки на задачи

Ссылки