Вы можете использовать простой алгоритм Kosaraju на основе DFS, который выполняет два обхода графа DFS:
Идея состоит в том, что если каждый узел может быть достигнут из вершины v, а каждый узел может достичь v, то граф сильно связен.
На шаге 2 алгоритма мы проверяем, достижимы ли все вершины из v. На шаге 4 мы проверяем, могут ли все вершины достичь v (В обратном графе, если все вершины достижимы из v, то все вершины могут достичь v в оригинале. график).
Алгоритм:
1) Инициализировать все вершины как не посещенные.
2) Выполните обход графа DFS, начиная с любой произвольной вершины v. Если обход DFS не посещает все вершины, верните false.
3) Инвертировать все дуги (или найти транспонирование или реверс графика)
4) Пометить все вершины как не посещенные в обратном графе.
5) Выполните обход DFS по обращенному графу, начиная с той же вершины v (как в шаге 2). Если обход DFS не посещает все вершины, верните false. В противном случае верните true.
Сложность времени: временная сложность вышеописанной реализации такая же, как Поиск в глубину, который равен O (V + E), если граф представлен с использованием представления списка смежности.