Dos vértices distintos en un gráfico dirigido están fuertemente conectados si hay un camino en el gráfico de cada uno al otro. Un componente fuertemente conectado del gráfico es un subconjunto del gráfico de tal manera que cada par de vértices distintos en el subconjunto están fuertemente conectados, y agregar más vértices al subconjunto rompería esta propiedad.
Su desafío es separar un gráfico en sus componentes fuertemente conectados. Específicamente, debe generar todos los SCC en el gráfico.
E / S:
Como entrada, puede usar una lista de aristas dirigidas, una lista de adyacencia, una matriz de adyacencia o cualquier otro formato de entrada razonable. Pregunta si no estás seguro. Puede suponer que el gráfico no tiene vértices totalmente desconectados y que no hay bordes propios, pero no puede hacer más suposiciones. Opcionalmente, también puede tomar la lista de vértices como entrada, así como la cantidad de vértices.
Como salida, debe dar una partición de los vértices, como una lista de listas de vértices, donde cada sublista es un componente fuertemente conectado, o una etiqueta de vértices, donde cada etiqueta corresponde a un componente diferente.
Si usa un etiquetado, las etiquetas deben ser vértices o una secuencia consecutiva de enteros. Esto es para evitar desplazar el cálculo en las etiquetas.
Ejemplos:
Estos ejemplos toman listas de aristas, donde cada arista se dirige desde la primera entrada a la segunda entrada, y las particiones de salida. Usted es libre de usar este formato u otro.
La entrada está en la primera línea, la salida está en la segunda línea.
[[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]]
Puntuación y restricciones:
Las lagunas estándar están prohibidas, como siempre. Además, están prohibidos los elementos integrados que se ocupan específicamente de componentes fuertemente conectados.
Las soluciones deben ejecutarse en no más de una hora en los ejemplos proporcionados. (Esto está destinado a evitar soluciones exponenciales lentas, y nada más).
Este es el código de golf. Pocos bytes ganan.
8
no está en un componente [3,4]
porque no puede solo cada uno 6
y 7
(ninguno de los dos lo alcanza).