Due vertici distinti in un grafico diretto sono fortemente collegati se esiste un percorso nel grafico tra loro. Un componente fortemente connesso del grafico è un sottoinsieme del grafico in modo tale che ogni coppia di vertici distinti nel sottoinsieme sia fortemente connessa e l'aggiunta di altri vertici al sottoinsieme spezzerebbe questa proprietà.
La tua sfida è quella di separare un grafico nei suoi componenti fortemente connessi. In particolare, è necessario generare tutti gli SCC nel grafico.
I / O:
Come input, è possibile utilizzare un elenco di spigoli diretti, un elenco di adiacenza, una matrice di adiacenza o qualsiasi altro formato di input ragionevole. Chiedi se non sei sicuro. È possibile supporre che il grafico non abbia vertici totalmente disconnessi e che non vi siano contorni automatici, ma non è possibile fare ulteriori assunzioni. Se lo si desidera, è anche possibile prendere l'elenco di vertici come input, nonché il numero di vertici.
Come output, è necessario fornire un partizionamento dei vertici, come un elenco di elenchi di vertici, in cui ciascun elenco secondario è un componente fortemente connesso, oppure un'etichettatura di vertici, in cui ogni etichetta corrisponde a un componente diverso.
Se si utilizza un'etichettatura, le etichette devono essere vertici o una sequenza consecutiva di numeri interi. Questo per evitare di scaricare il calcolo nelle etichette.
Esempi:
Questi esempi prendono elenchi di spigoli, in cui ogni spigolo è diretto dalla prima alla seconda voce e le partizioni di output. Sei libero di utilizzare questo formato o un altro.
L'ingresso è sulla prima riga, l'output è sulla seconda riga.
[[1, 2], [2, 3], [3, 1], [1, 4]]
[[1, 2, 3], [4]]
[[1, 2], [2, 3], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]]
[[1, 2, 4], [3]]
[[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]
[[1, 2, 5], [3, 4, 8], [6, 7]]
Punteggio e restrizioni:
Le scappatoie standard sono vietate, come sempre. Inoltre, sono vietati gli incorporati che trattano specificamente componenti fortemente connessi.
Le soluzioni dovrebbero essere eseguite in non più di un'ora sugli esempi forniti. (Questo ha lo scopo di prevenire soluzioni esponenziali lente e nient'altro.)
Questo è il codice golf. Vince il minor numero di byte.
8
non è in un componente [3,4]
perché non può solo ciascuno 6
e 7
(nessuno dei quali può raggiungerlo).