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 45 46 47 48 49 50 51 52
| % **** tous chemins entre 2 tables non directement liées... ****
isLien2Table(X,X,_,[X]).
isLien2Table(X,Y,P,[X|C]) :-
isLien(X, Z),
\+ member(Z,P),
isLien2Table(Z,Y,[X|P],C).
% **** chemin le + court entre 2 tables non directement liées... ****
isLienCourt([ouvert(Destination,C)|_], Destination, _, C).
isLienCourt([ouvert(A,B)|T], Destination, K, C) :-
findall(ouvert(N,[N|B]), (isLien(A,N),\+ member(N,K)), S),
append(T,S,L),
isLienCourt(L, Destination, [A|K], C).
isLien2TableCourt(Origine, Destination, C) :- isLienCourt([ouvert(Origine, [Origine])], Destination, [], C).
% **** Lien entre 2 tables ****
isLien2(A, B, Liste) :- isLien2TableCourt(A,B,Liste).
isLien2(A, B, Liste) :- isLien2Table(A,B,[],Liste).
% **** Lien entre 3 tables ****
isLien3(A,B,C,Liste) :-
isLien2(A, B, Liste),
member(C,Liste).
isLien3(A,B,C,Liste) :-
isLien2(A, C, Liste),
member(B,Liste).
isLien3(A,B,C,Liste) :-
isLien2(B, C, Liste),
member(A,Liste).
% **** Lien entre 4 tables ****
isLien4(A,B,C,D,Liste) :-
isLien3(A, B,C, Liste),
member(D,Liste).
isLien4(A,B,C,D,Liste) :-
isLien3(A, C, D, Liste),
member(B,Liste).
isLien4(A,B,C,D,Liste) :-
isLien3(A, D, B, Liste),
member(C,Liste).
isLien4(A,B,C,D,Liste) :-
isLien3(D, B,C, Liste),
member(A,Liste). |
Partager