% 通路の定義
link(a,b).
link(a,c).
link(b,d).
link(c,e).
link(d,f).
link(f,g).
link(f,h).
link(h,g).
path(X,Y) :- link(X,Y)|link(Y,X).
pathFind(Pos,Pos,_,[Pos]) :- !.
pathFind(Pos,Goal,Path,[Pos|Tail]) :-
not(member(Pos,Path)),
path(Pos,Z),
pathFind(Z,Goal,[Pos|Path],Tail).
pathFindAll
(Start
,Goal
) :- pathFind
(Start
,Goal
,[],Path
),print
(Path
),nl,fail.
noLoop(X,[]).
noLoop
(X
,[X
|Z
]) :- !,fail.noLoop(X,[Y|Z]) :- noLoop(X,Z).
% 探索の指示
:- pathFindAll(a,g).
JSDpgJrot6/jga7lrprnvqkKbGluayhhLGIpLgpsaW5rKGEsYykuCmxpbmsoYixkKS4KbGluayhjLGUpLgpsaW5rKGQsZikuCmxpbmsoZixnKS4KbGluayhmLGgpLgpsaW5rKGgsZykuCgpwYXRoKFgsWSkgOi0gbGluayhYLFkpfGxpbmsoWSxYKS4KCnBhdGhGaW5kKFBvcyxQb3MsXyxbUG9zXSkgOi0gIS4KcGF0aEZpbmQoUG9zLEdvYWwsUGF0aCxbUG9zfFRhaWxdKSA6LQogbm90KG1lbWJlcihQb3MsUGF0aCkpLAogcGF0aChQb3MsWiksCiBwYXRoRmluZChaLEdvYWwsW1Bvc3xQYXRoXSxUYWlsKS4KCnBhdGhGaW5kQWxsKFN0YXJ0LEdvYWwpIDotIHBhdGhGaW5kKFN0YXJ0LEdvYWwsW10sUGF0aCkscHJpbnQoUGF0aCksbmwsZmFpbC4KCm5vTG9vcChYLFtdKS4Kbm9Mb29wKFgsW1h8Wl0pIDotICEsZmFpbC4Kbm9Mb29wKFgsW1l8Wl0pIDotIG5vTG9vcChYLFopLgoKJSDmjqLntKLjga7mjIfnpLoKOi0gcGF0aEZpbmRBbGwoYSxnKS4=