:- set_prolog_flag(verbose,silent).
:- prompt(_, '').
:- use_module(library(readutil)).
% 通路の定義
path
(X
,Y
) :- link(X
,Y
)|link(Y
,X
). % 通路を一方通行にしない。この行を削除すると、一方通行になる。
% 目的地に着いている場合
pathFind(Pos,Pos,_,[Pos]) :- !. % 目的地から先の探索を中断
% 目的地に着いていない場合
pathFind(Pos,Goal,Check,[Pos|Tail]) :-
not(member(Pos,Check)), % 通過地点記録 Check に Pos が含まれないことを確認
path(Pos,Z), % Posと接続したZを見つける
pathFind(Z,Goal,[Pos|Check],Tail). % ZからGoalを目指す。Pos を Check に加える
% 全ての経路を探索
pathFindAll
(Start
,Goal
) :- pathFind
(Start
,Goal
,[],Path
),print(Path
),nl
,fail
.pathFindAll(_,_).
% 探索の指示の例
:- pathFindAll( a , g ).
:- halt.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCgolIOmAmui3r+OBruWumue+qQpsaW5rKGEsYikuCmxpbmsoYSxjKS4KbGluayhiLGQpLgpsaW5rKGMsZSkuCmxpbmsoZCxmKS4KbGluayhmLGcpLgpsaW5rKGYsaCkuCmxpbmsoaCxnKS4KCnBhdGgoWCxZKSA6LSBsaW5rKFgsWSl8bGluayhZLFgpLiAlIOmAmui3r+OCkuS4gOaWuemAmuihjOOBq+OBl+OBquOBhOOAguOBk+OBruihjOOCkuWJiumZpOOBmeOCi+OBqOOAgeS4gOaWuemAmuihjOOBq+OBquOCi+OAggoKJSDnm67nmoTlnLDjgavnnYDjgYTjgabjgYTjgovloLTlkIgKcGF0aEZpbmQoUG9zLFBvcyxfLFtQb3NdKSA6LSAhLiAlIOebrueahOWcsOOBi+OCieWFiOOBruaOoue0ouOCkuS4reaWrQoKJSDnm67nmoTlnLDjgavnnYDjgYTjgabjgYTjgarjgYTloLTlkIgKcGF0aEZpbmQoUG9zLEdvYWwsQ2hlY2ssW1Bvc3xUYWlsXSkgOi0KIG5vdChtZW1iZXIoUG9zLENoZWNrKSksICAgICAgICAgICAgJSDpgJrpgY7lnLDngrnoqJjpjLIgQ2hlY2sg44GrIFBvcyDjgYzlkKvjgb7jgozjgarjgYTjgZPjgajjgpLnorroqo0KIHBhdGgoUG9zLFopLCAgICAgICAgICAgICAgICAgICAgICAlIFBvc+OBqOaOpee2muOBl+OBn1rjgpLopovjgaTjgZHjgosKIHBhdGhGaW5kKFosR29hbCxbUG9zfENoZWNrXSxUYWlsKS4gJSBa44GL44KJR29hbOOCkuebruaMh+OBmeOAglBvcyDjgpIgQ2hlY2sg44Gr5Yqg44GI44KLCgolIOWFqOOBpuOBrue1jOi3r+OCkuaOoue0ogpwYXRoRmluZEFsbChTdGFydCxHb2FsKSA6LSBwYXRoRmluZChTdGFydCxHb2FsLFtdLFBhdGgpLHByaW50KFBhdGgpLG5sLGZhaWwuCnBhdGhGaW5kQWxsKF8sXykuCgolIOaOoue0ouOBruaMh+ekuuOBruS+iwo6LSBwYXRoRmluZEFsbCggYSAsIGcgKS4KCjotIGhhbHQu