Sorprendentemente, non abbiamo ancora avuto problemi con la colorazione dei grafici!
Dato un grafico non orientato, possiamo dare a ciascun vertice un colore in modo tale che due vertici adiacenti non condividano lo stesso colore. Il numero più piccolo χ di colori distinti necessari per raggiungere questo obiettivo è chiamato numero cromatico del grafico.
Ad esempio, quanto segue mostra una colorazione valida utilizzando il numero minimo di colori:
(Trovato su Wikipedia)
Quindi il numero cromatico di questo grafico è χ = 3 .
Scrivi un programma o una funzione che, dato un numero di vertici N <16 (che sono numerati da 1 a N ) e un elenco di spigoli, determina il numero cromatico di un grafico.
È possibile ricevere l'input e produrre l'output in qualsiasi formato conveniente, purché l'input non sia pre-elaborato. Cioè, puoi usare una stringa o un array, aggiungere comodi delimitatori alla stringa o usare un array nidificato, ma qualunque cosa tu faccia, la struttura appiattita dovrebbe contenere gli stessi numeri degli esempi seguenti (nello stesso ordine).
Non è possibile utilizzare funzioni correlate alla teoria dei grafi incorporate (come quelle di Mathematica ChromaticNumber
).
Si può presumere che il grafico non abbia un ciclo (un bordo che collega un vertice con se stesso) in quanto ciò renderebbe il colore incolore.
Questo è il codice golf, vince la risposta più breve (in byte).
Esempi
Il tuo programma deve almeno risolverli tutti in un ragionevole lasso di tempo. (Deve risolvere correttamente tutti gli input, ma potrebbe richiedere più tempo per input più grandi.)
Per abbreviare il post, nei seguenti esempi, presento i bordi in un unico elenco separato da virgole. È possibile invece utilizzare le interruzioni di riga o aspettarsi l'input in un formato dell'array conveniente, se si preferisce.
Triangolo (χ = 3)
3
1 2, 2 3, 1 3
"Ring" di 6 vertici (χ = 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
"Ring" di 5 vertici (χ = 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
Immagine di esempio sopra (χ = 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
Generalizzazione di quanto sopra per 7 vertici (χ = 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
Grafico di 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
Grafico completo di 5 vertici, più vertice disconnesso (χ = 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
Grafico completo di 8 vertici (χ = 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
Reticolo triangolare con 15 vertici (χ = 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