Sorprendentemente, ¡todavía no hemos tenido ningún desafío en la coloración de gráficos!
Dado un gráfico no dirigido, podemos darle a cada vértice un color tal que no haya dos vértices adyacentes que compartan el mismo color. El número más pequeño χ de colores distintos necesarios para lograr esto se llama el número cromático del gráfico.
Por ejemplo, a continuación se muestra una coloración válida con el número mínimo de colores:
(Encontrado en Wikipedia)
Entonces el número cromático de este gráfico es χ = 3 .
Escriba un programa o función que, dado un número de vértices N <16 (que están numerados del 1 al N ) y una lista de aristas, determina el número cromático de un gráfico.
Puede recibir la entrada y producir la salida en cualquier formato conveniente, siempre que la entrada no se procese previamente. Es decir, puede usar una cadena o una matriz, agregar delimitadores convenientes a la cadena o usar una matriz anidada, pero haga lo que haga, la estructura aplanada debe contener los mismos números que los ejemplos a continuación (en el mismo orden).
No puede utilizar funciones relacionadas con la teoría de grafos incorporadas (como las de Mathematica ChromaticNumber
).
Puede suponer que el gráfico no tiene un bucle (un borde que conecta un vértice consigo mismo) ya que eso haría que el gráfico no se pueda colorear.
Este es el código de golf, gana la respuesta más corta (en bytes).
Ejemplos
Su programa debe resolver al menos todo esto en un tiempo razonable. (Debe resolver todas las entradas correctamente, pero puede tomar más tiempo para entradas más grandes).
Para acortar la publicación, en los siguientes ejemplos, presento los bordes en una sola lista separada por comas. En su lugar, puede usar saltos de línea o esperar la entrada en algún formato de matriz conveniente, si lo prefiere.
Triángulo (χ = 3)
3
1 2, 2 3, 1 3
"Anillo" de 6 vértices (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
"Anillo" de 5 vértices (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Imagen de ejemplo arriba (χ = 3)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1, 1 3, 2 4, 3 5, 4 6, 5 1, 6 2
Generalización de lo anterior para 7 vértices (χ = 4)
7
1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 1, 1 3, 2 4, 3 5, 4 6, 5 7, 6 1, 7 2
Gráfico de Petersen (χ = 3)
10
1 2, 2 3, 3 4, 4 5, 5 1, 1 6, 2 7, 3 8, 4 9, 5 10, 6 8, 7 9, 8 10, 9 6, 10 7
Gráfico completo de 5 vértices, más vértice desconectado (χ = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Gráfico completo de 8 vértices (χ = 8)
8
1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 3 4, 3 5, 3 6, 3 7, 3 8, 4 5, 4 6, 4 7, 4 8, 5 6, 5 7, 5 8, 6 7, 6 8, 7 8
Enrejado triangular con 15 vértices (χ = 3)
15
1 2, 1 3, 2 3, 2 4, 2 5, 3 5, 3 6, 4 5, 5 6, 4 7, 4 8, 5 8, 5 9, 6 9, 6 10, 7 8, 8 9, 9 10, 7 11, 7 12, 8 12, 8 13, 9 13, 9 14, 10 14, 10 15, 11 12, 12 13, 13 14, 14 15
fuente