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 38 39 40 41 42 43 44
| couloir(1,2).
couloir(2,3).
couloir(2,4).
couloir(3,minautore).
couloir(3,5).
couloir(5,sortie).
couloir(4,6).
couloir(6,7).
couloir(7,8).
couloir(7,puits).
couloir(8,9).
couloir(9, sortie).
ajouter(X, L, [X|L]).
aller(X,Y,S):-
rechPf(X,Y,[X],S).
longueur_trajet(X, Z) :-
findall(T, (aller(X,'sortie',S),length(S,T)), Z).
plus_court(X,'sortie',Z):-
aller(X,'sortie',S),
length(S,T),
ajouter(T,L,Z),
L is Z.
rechPf(Ef,Ef,_,[]):-!.
rechPf(Ec,Ef,Chemin,[Coup|Solution]):-
operateur(Ec,Coup,Es),
not(interdit(Es)),
not(member(Es,Chemin)),
%write(Ec),write(' '),write(Coup),write(' '),write(Es),nl,
rechPf(Es,Ef,[Es|Chemin],Solution).
operateur(X,[X,Y],Y) :- couloir(X,Y).
operateur(X,[X,Y],Y) :- couloir(Y,X).
interdit(minotaure).
interdit(puits).
interdit(impasse). |
Partager