move(1,6).
move(1,8).
move(2,7).
move(2,9).
move(3,4).
move(3,8).
move(4,3).
move(4,9).
move(6,7).
move(6,1).
move(7,6).
move(7,2).
move(8,3).
move(8,1).
move(9,4).
move(9,2).

:-dynamic been/1.

been(0).

path-a(Z,Z).
path-a(X,Y):-move(X,W),not(been(W)),assert(been(W)),path-a(W,Y). 

path-b(Z,Z,L).
path-b(X,Y,L):-move(X,W),not(member(W,L)),path-b(W,Y,[W|L]). 

path2-a(X,Y):-move(X,Z),move(Z,Y).

path2-b(X,Y):-move(X,Z),!,move(Z,Y).

% run the following as path-c(1,X,[1]) and compare with path-b(1,X,[1]).

path-c(Z,Z,L).
path-c(X,Y,L):-move(X,Z),not(member(Z,L)),path-c(Z,Y,[Z|L]),!. 
