Drop links or images here to add them to the editor.

Een coloring van een graaf \(G\) is een toekenning van kleuren (elementen van een bepaalde verzameling) aan de toppen van \(G\), één kleur per top, zodanig dat adjacente toppen een verschillende kleur krijgen. Wanneer \(k\) kleuren worden gebruikt, wordt dit een \(k\)-coloring genoemd. Indien er een \(k\)-coloring voor een graaf \(G\) bestaat, dan noemt men de graaf \(G\) \(k\)-kleurbaar.

Voorbeeld

3-coloring van een graaf

Gegeven is de graaf in bovenstaande afbeelding. Deze graaf is 3-kleurbaar, de kleuren van de toppen zijn weergegeven in de figuur. Merk op dat er geen twee adjacente toppen zijn die dezelfde kleur hebben.

Gevraagd wordt nu om te bepalen of een graaf \(k\)-kleurbaar is. Ontwerp hiervoor een recursief backtracking algoritme.

Implementeer de gegeven interface Coloring in een klasse GraphColoring. Implementeer hiervoor de methode public boolean coloringPossible(UndirectedGraph<String> graph, int k) die een graaf \(G\) en het aantal te gebruiken kleuren \(k\) als input krijgt. Als output geeft deze methode true terug indien \(G\) \(k\)-kleurbaar is en false indien dit niet zo is.

We maken bij deze oefening gebruik van de grafenbibliotheek graphlib, die o.a. de klasse UndirectedGraph bevat. De volledige API kan je hier raadplegen. Een andere interessante klasse die je zou kunnen gebruiken in je algoritme is de klasse Node. Neem eerst en vooral eens de API door en stel eventueel vragen hierover voor je begint te programmeren.

Opmerkingen

Gebruik eventueel de testklasse SimpleTest om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.