Ontwerp en implementeer een algoritme dat nagaat of de toppen van een gegeven graaf met slechts twee kleuren kunnen worden gekleurd, zodanig dat twee adjacente toppen een verschillende kleur hebben. Denk ook na over de tijdscomplexiteit van je algoritme.
Implementeer de interface TweeKleuringZoeker
1 in een klasse genaamd BreedteEerstZoeker
. Hiervoor schrijf je een methode public Tweekleuring kleur(UndirectedGraph<String> graph)
, die een ongerichte graaf als argument heeft. Deze methode geeft een mogelijke kleuring (type TweeKleuring
2) van de gegeven graaf terug, of null
als er geen kleuring mogelijk is. Zoals de naam suggereert is het de bedoeling om breedte-eerst te werken.
We maken bij deze oefening gebruik van een eenvoudige grafenbibliotheek graphlib
3. Deze bevat onder meer de klassen UndirectedGraph
en Node
. De API van deze bibliotheek vind je hier4. Neem eerst en vooral eens de API door en stel eventueel vragen hierover voor je begint te programmeren.
Gebruik eventueel de testklasse SimpleTest
5 om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.
Belangrijke opmerking: om met de grafenbibliotheek te kunnen werken in IntelliJ, moet je het bestand graphlib.jar
6 toevoegen aan je project. Hiervoor ga je naar File -> Project Structure…. Vervolgens kies je Libraries en klik je op de knop met het plusteken (+). Kies voor Java en navigeer naar het gedownloade bestand graphlib.jar
.
Het is niet toegestaan om de input van de methode kleur
aan te passen. Indien je dit wel doet, zal de test falen.