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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| :- dynamic( meme_toit1/2 ).
meme_toit1(julie,solange).
meme_toit1(solange,sophie).
meme_toit1(romain,jeff).
meme_toit1(romain,grégoire).
ensemble(E) :-
findall(
X
,
(meme_toit1(X,_) ; meme_toit1(_,X))
,
L
),
sort(L, E).
trans(L1, [], L2) :-
!,
sort(L1, L2).
trans(L1, L2, R) :-
findall(Y
,
(
member(X, L2),
(meme_toit1(X,Y) ; meme_toit1(Y,X)),
\+memberchk(Y,L1),
\+memberchk(Y,L2)
)
,
L3
),
append(L1, L2, L4),
trans(L4, L3, R).
combi(L, X, Y) :-
member(X, L),
member(Y, L).
meme_toit(X,Y) :-
ensemble(E),
meme_toit(E, [], X, Y).
meme_toit([Elem|Q], Visited, X, Y) :-
\+memberchk(Elem, Visited),
!,
trans([], [Elem], L),
(
combi(L, X, Y)
;
(
union(Visited, L, S),
meme_toit(Q, S, X, Y)
)
).
meme_toit([_|Q], Visited, X, Y) :-
meme_toit(Q, Visited, X, Y). |
Partager