Vous êtes sur la page 1sur 6

MASTER DSBD 2021/2022

Module : Intelligence artificielle

Nom et prénom : MEFTAHI Jamil


-Définissons le prédicat reines(N,L) où L représente
la liste des ordonnées de N reines placées sur un
échiquier (N×N) de telle manière qu’elles ne s’attaquent
pas mutuellement :
-Solution :
reines(N,L):- genere_liste(N,L),
placer_reines(N,L,_,_).

genere_liste(0,[]).
genere_liste(N,[_|Li]):-N>0, M is N-
1,genere_liste(M,Li).

placer_reine(I,[I|_],[I|_],[I|_]).
placer_reine(I,[_|AD],[_|D],[_|Ds]):-
placer_reine(I,AD,D,Ds).

placer_reines(0,_,_,_).
placer_reines(I,AD,D,[_|Ds]):-I>0, J is I-
1,placer_reines(J,AD,[_|D],Ds),placer_reine(I,AD,D,
Ds).

-Explication des variables/prédicats :


Variables :
-N, M : taille de l’échiquier
-I, J : numéro de la ligne sur laquelle se trouve la reine
actuelle.
-L, Li : Liste de longueur N utilisée pour représenter la
solution.
-Cs : Colonne sous forme de liste de champs de longueur N.
-D : Diagonale sous forme de liste ouverte de champs
-AD : Antidiagonale sous forme de liste ouverte de champs
Prédicats :
• placer_reine(Reines,Colonne,Diagonale,AntiDiagonale):
remplir la colonne I quelque part dans la liste. il
obtient toujours la liste complète des positions de la
reine [R1, R2, R3, R4] et des parties de la liste des
diagonales et des antidiagonales
• placer_reines fait deux choses :
- Dérouler une liste de diagonales [U1, U2, U3, U4|_] et
de antidiagonales [D1, D2, D3, D4|_] ; et
- Appeler placer_reine avec une valeur spécifique, et
certaines parties de la liste des hauts et des bas.
• genere_liste: générer une liste de variables de longueur
N.

-Exécution :
-Exécution avec (trace) :

Vous aimerez peut-être aussi