W grafie skierowanym składowa silnie spójna to taka składowa w której pomiędzy dwoma dowolnymi wierzchołkami istnieje ścieżka. Jeden graf może zawierać wiele składowych silnie spójnych. Do wykrywanie takich składowych używa się algorytmu DFS.
W celu wykrycia Silnie Spójnych Składowych należy kolejno:
Dany jest następujący graf skierowany:
Pierwszy krok polega na poindeksowaniu elementów. W praktyce wystarczy po rekurencyjnym odwiedzieniu wszystkich sąsiadów dla danego wierzchołka jedynie odłożyć wierzchołek na stos. W ten sposóby otrzymujemy na stosie kolejno C, E, D, B, A jeśli algorytm DFS rozpoczniemy w wierzchołku A.
Teraz należy transponować graf czyli zamienić kierunek krawędzi.
Resetujemy status odwiedzenia wierzchołków (tj. wszystkie są nieodwiedzone). Rozpoczynamy przeglądanie grafu według kolejności na stosie. Rozpoczynamy zatem od wierzchołka C. Wszystkie odwiedzone wierzchołki w danej "turze" algorytmu DFS to jedna składowa.
W tym grafie znajdują się trzy składowe (z czego dwie to pojedyncze wierzchołki, ale też liczy się je jako składowe):
Metoda do odwiedzania wierzchołków będzie wykonywać rekurencyjne odwiedzanie kolejnych sąsiadów, którzy dotychczas pozostali nieodwiedzeni. Do tego należy przekazać macierz grafu, aktualną tablicę z informacji o tym, które wierzchołki są odwiedzone, aktualny indeks odwiedzanego wierzchołka oraz aktualny stos.
Jedyną różnicą pomiędzy typowym algorytmem DFS, a powyższym jest dodanie zapisywanie informacji na stosie. Przyda się wpierw do nadanie indeksów wierzchołkom, a następnie do szybkiego odczytania znalezionej składowej.
W przypadku macierzy transpozycja grafu polega na zamianie wszystkich par (x, y) z (y, x) tak jak w algorytmie poniżej:
Zgodnie z algorytmem pierwsza część polega na nadaniu indeksów wierzchołkom. Następnie resetujemy status odwiedzonych pól i transponujemy graf. Teraz potrzebny jest algorytm DFS, który przy każdym przejściu wyznaczy wierzchołki tworzące składową silnie spójną.
W celu zapisania wierzchołków w składowej do funkcji przekazujemy stos na który są dorzucane kolejne odwiedzane wierzchołki. Po zakończeniu są one zdejmowane ze stosu i wypisywane. Należy pamiętać, żeby nie szukać algorytmem DFS dla wierzchołków, które zostały odwiedzone w poprzednich składowych!
Do przetestowanie kodu można wykorzystać poniższy algorytm: