Tarjan's l'algoritmo di componenti fortemente connessi (o variazione Gabow's) sarà ovviamente sufficiente; se c'è solo un componente fortemente connesso, allora il grafico è fortemente connesso.
Entrambi sono orari lineari.
Come in una normale ricerca di profondità, si traccia lo stato di ciascun nodo: nuovo, visto ma ancora aperto (è nello stack di chiamate), visto e completato. Inoltre, si memorizza la profondità quando si raggiunge un nodo per la prima volta, e la profondità più bassa che è raggiungibile dal nodo (lo si conosce dopo aver terminato un nodo). Un nodo è la radice di un componente fortemente connesso se la profondità più bassa raggiungibile è uguale alla sua profondità. Questo funziona anche se la profondità con cui si raggiunge un nodo dalla radice non è il minimo possibile.
Per verificare solo se l'intero grafico è un singolo SCC, avviare il dfs da qualsiasi nodo singolo e, al termine, se la profondità minima raggiungibile è 0 e ogni nodo è stato visitato, quindi l'intero grafico è fortemente connesso
fonte
2009-09-16 18:54:51
Credo che il nome comunemente accettato sia "grafico diretto", non "grafico direzionale". –