Я не могу понять, как работает алгоритм сильно связанного компонента
Алгоритм сильносвязанного компонента из моей книги:
сильно соединенный-компонент (G)
- вызовите DFS(G) для вычисления времени окончания f[u] для каждой вершины u
- вычислить транспонирование (G)
- вызовите DFS(Transpose(G)), но в главном цикле DFS рассмотрите вершины в порядке убывания f[u] (как вычислено в строке 1)
- выведите вершины каждого дерева в лесу глубины первый шага 3 как отдельный компонент со строгой связью
Я не очень понимаю, как работает строка 4, как алгоритм создает лес из DFS на транспонированном графе. Я понимаю, почему оба раза звонить в DFS.
Спасибо за любую помощь.
1 ответ
Основной цикл DFS вызывает рекурсивную вспомогательную функцию для каждой вершины, чтобы исследовать вершины, достижимые из этой вершины. "Дерево" здесь - это множество вершин, недавно посещенных одним из этих рекурсивных вызовов. Вспомогательная функция должна быть модифицирована, чтобы создать этот набор, который является сильным компонентом, когда он не пуст.