1 /* librairie à intégrer */
3 :-use_module(library(assoc)).
6 /* successeurs_liste(L,Sl) est vrai si Sl est la liste
7 de tous les successeurs de L*/
8 successeurs_liste(L,Sl):-
9 maplist(successeurs,L,Lp),
15 /* list_minus(L1,L2,L3) est vrai si
16 L3 est la liste de tous les éléments Conf-_ de L1 dont
17 Conf n appartient pas à L2 */
19 list_minus([Conf-_|L1],L2,Res):-
21 list_minus(L1,L2,Res).
22 list_minus([El|L1],L2,[El|Res]):-
23 list_minus(L1,L2,Res).
27 /* but(L,Ch) est vrai si L contient une configuration
28 finale et si Ch est le chemin qui a mené a cette configuration */
29 but([Conf-Chemin|_],Chemin):-final(Conf),!.
30 but([_|L],Chemin):-but(L,Chemin).
34 /* largeur(Atraiter,Visites,C,Res) est vrai si
35 Atraiter est la liste des configurations-chemins qu il reste à visiter
36 Visites est la liste des configurations déjà visités
37 C est l entier représentant la profondeur de recherche
38 Res est le chemin menant à une configuration finale */
39 largeur(Atraiter,_,_,Res):-
41 largeur(Atraiter,Visites,C,Res):-
43 writef("boucle %d \n",[C]),
44 maplist(filtre_conf,Atraiter,V1),
45 append(V1,Visites,Omis),
46 successeurs_liste(Atraiter,Succ),
47 list_minus(Succ,Omis,Atraiter2),
48 largeur(Atraiter2,Omis,Cp,Res).
55 largeur([X-[]],[],0,Res),
59 writef('Duree : % \n',[DT1]).