Componente fortemente connessa
# Componente fortemente connessa

Una componente fortemente connessa di un grafo diretto G è un sottografo massimale di G in cui esiste un cammino orientato tra ogni coppia di nodi ad esso appartenenti.

Le componenti fortemente connesse formano una partizione di G poiché un nodo non può trovarsi contemporaneamente in due componenti fortemente connesse, di conseguenza un grafo diretto è fortemente connesso se e solo se ha una sola componente fortemente connessa.

Due vertici di G sono fortemente connessi se e solo se fanno parte dello stesso ciclo orientato.

## Algoritmi per il calcolo delle componenti fortemente connesse

### Definizione del problema

Dato un grafo orientato ciclico, si richiede di identificare le componenti fortemente connesse e un loro ordine topologico

### Algoritmo di Tarjan

L'algoritmo di Tarjan per le componenti fortemente connesse è uno degli algoritmi più efficienti per effettuare la ricerca delle strutture fortemente connesse in un grafo. Opera infatti a complessità lineare al numero degli archi e dei vertici O(|V|+|E|).

### Algoritmo di Kosaraju

L'algoritmo di Kosaraju-Sharir consiste nell'eseguire una visita in profondità del grafo e una successiva visita in profondità del grafo trasposto, in cui gli archi sono invertiti, scegliendo i nodi nell'ordine di fine visita ottenuto durante la prima visita in profondità. In tal modo si riesce a identificare le componenti fortemente connesse del grafo in tempo Θ(V+E). Risulta quindi più semplice da implementare ma meno efficiente dell'algoritmo di Tarjan e di quello di Gabow che effettuano una sola visita in profondità del grafo.

### Algoritmo di Gabow

L'algoritmo di Cheriyan–Mehlhorn/Gabow consiste nell'eseguire una sola ricerca in profondità sul grafo, utilizzando uno stack per tenere traccia dei vertici che non sono ancora stati assegnati ad una componente. Come l'algoritmo di Tarjan viene effettuata una sola ricerca in profondità.

