graph([edge(1,2),edge(1,4),edge(1,3),edge(2,3),edge(2,5),edge(3,4),edge(3,5),edge(4,5)]). connected(A,C,G) :- member(edge(A,C),G);member(edge(C,A),G). minus([],_,[]). minus([edge(A,_)|E],A,G1):-minus(E,A,G1). minus([edge(_,A)|E],A,G1):-minus(E,A,G1). minus([edge(X,Y)|E],A,[edge(X,Y)|E1]):- X\==A,Y\==A,minus(E,A,E1). path1(A,B,G,[A,B]):- connected(A,B,G). path1(A,B,G,[A|P1]) :- connected(A,C,G), C\==B, minus(G,A,G1), path1(C,B,G1,P1). path(A,B,P):-graph(G),path1(A,B,G,P).