:- use_module(library(lists)).


graf1([a-b,a-d,b-c,b-d,b-e,c-d,c-e,d-e]).
graf2([a-b,a-d,b-c,b-d]).
graf3([a-b,a-d,c-e]).

azonos_el(P-Q,P-Q).
azonos_el(P-Q,Q-P).

%-----------------------------------------------------------------------------------


kezdopontok(G,L):- findall(A, member(A-B,G),L).
% Feladat: modositsd a fenti szabalyt ugy, hogy a lista minden kezdopontot egyszer
% tartalmazzon!
% Feladat: modositsd a fenti szabalyt ugy, hogy a lista minden CSUCSOT tartalmazzon
% pontosan egyszer! (Hasznald az azonos_el/2 predikatumot!)

%-----------------------------------------------------------------------------------


ujelem(A,[],[A]).
ujelem(A,[B|L],[B|L1]):- A \= B, ujelem(A,L,L1).

% ut(G,P,A,B): P ut A csucsbol B csucsba a G grafban
ut(G,P,A,B):- ut(G,P,A,B,[A]).
ut(_,[],A,A,_).
ut(G,[E|P],A,B,CS):- select(E,G,_), azonos_el(A-C,E), ujelem(C,CS,CS1), ut(G,P,C,B,CS1).

% elerhetok(G,A,L): L a G-ben az A-bol elerheto csucsok listaja
elerhetok(G,A,L):- setof(B,P^ut(G,P,A,B),L).

% elerhetok(G,A,L,K): L a G-ben az A-bol legfeljebb K lepesben elerheto csucsok listaja
elerhetok(G,A,L,K):- setof( B, P^N^(ut(G,P,A,B),length(P,N),N=<K), L).


% Feladatok:
% * csucsok osszegyujtese megoldasgyujtok hasznalataval
% * grafban elofordulo haromszogek kilistazasa
% * adott csucs fokszamanak meghatarozasa
% * iranyitott graf nyeloinek (0 kifoku csucsok) kigyujtese
% * iranyitott graf csucsainak kifokuk szerinti szetvalogatasa