-
Notifications
You must be signed in to change notification settings - Fork 0
/
coloriage.pl
37 lines (28 loc) · 853 Bytes
/
coloriage.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
colorie :-
tous_les_pays(Liste),
colorie(Liste).
colorie(Liste) :-
colorie(Liste, Resultat),
affiche(Resultat).
colorie(Liste, Resultat) :-
colorie(Liste, [], Resultat).
colorie([], Precedents, Precedents).
colorie([Prem|Reste], Precedents, Resultat) :-
couleur(Coul),
not(incompatible(Prem, Coul, Precedents)),
colorie(Reste, [[Prem, Coul]|Precedents], Resultat).
incompatible(Pays, Couleur, [[Voisin, Couleur]|_]) :-
voisins(Pays, Voisin).
incompatible(Pays, Couleur, [_|Reste]) :-
incompatible(Pays, Couleur, Reste).
tous_les_pays(L) :-
setof(Pays, Autre^voisins(Pays, Autre), L).
affiche([]).
affiche([[Pays,Couleur] |Reste]) :-
writef('%w -> %w\n', [Pays, Couleur]),
affiche(Reste).
voisins(X,Y) :- voisin(X,Y).
voisins(X,Y) :- voisin(Y,X).
couleur(bleu).
couleur(rouge).
couleur(vert).