Surpreendentemente, ainda não tivemos nenhum desafio na coloração de gráficos!
Dado um gráfico não direcionado, podemos atribuir a cada vértice uma cor de modo que não dois vértices adjacentes compartilhem a mesma cor. O menor número χ de cores distintas necessárias para conseguir isso é chamado número cromático do gráfico.
Por exemplo, o seguinte mostra uma coloração válida usando o número mínimo de cores:
(Encontrado na Wikipedia)
Portanto, o número cromático deste gráfico é χ = 3 .
Escreva um programa ou função que, dado um número de vértices N <16 (numerados de 1 a N ) e uma lista de arestas, determine o número cromático de um gráfico.
Você pode receber a entrada e produzir a saída em qualquer formato conveniente, desde que a entrada não seja pré-processada. Ou seja, você pode usar uma string ou uma matriz, adicionar delimitadores convenientes à string ou usar uma matriz aninhada, mas faça o que fizer, a estrutura nivelada deve conter os mesmos números que os exemplos abaixo (na mesma ordem).
Você não pode usar funções internas relacionadas à teoria dos grafos (como as do Mathematica ChromaticNumber
).
Você pode assumir que o gráfico não possui loop (uma aresta conectando um vértice a ele mesmo), pois isso tornaria o gráfico incolor.
Isso é código de golfe, a resposta mais curta (em bytes) vence.
Exemplos
Seu programa deve pelo menos resolver todos eles em um período de tempo razoável. (Ele deve resolver todas as entradas corretamente, mas pode levar mais tempo para entradas maiores.)
Para encurtar a postagem, nos exemplos a seguir, apresento as bordas em uma única lista separada por vírgula. Em vez disso, você pode usar quebras de linha ou esperar a entrada em algum formato de matriz conveniente, se preferir.
Triângulo (χ = 3)
3
1 2, 2 3, 1 3
"Anel" de 6 vértices (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
"Anel" de 5 vértices (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Exemplo de imagem acima (χ = 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
Generalização do exposto 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, mais 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
Estrutura triangular com 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