2つのステーション間のすべての可能なルートを提供するプログラムを作りたいと思います。私が持っている問題は、それが私にすべてのルートを与えないということです。私のコードは、これまでのところです:たとえば有向グラフ内のすべてのルート
connection(s1,s2).
connection(s2,s3).
connection(s3,s4).
connection(s4,s5).
connection(s5,s1).
connection(s1,s4).
connection(s2,s5).
direction1(X,Y) :- connection(X,Y).
direction2(X,Y) :- connection(Y,X).
route1(X,Y,R):- route1(X,Y,[X],R).
route1(X,Y,_,[X,Y]) :- direction1(X,Y).
route1(X, Y, Visited, Route) :- direction1(X, Z), Z \= Y, \+ member(Z, Visited), route1(Z, Y, [Z|Visited], Route1), Route = [X|Route1].
route2(X,Y,R):- route2(X,Y,[X],R).
route2(X,Y,_,[X,Y]) :- direction2(X,Y).
route2(X, Y, Visited, Route) :- direction2(X, Z), Z \= Y, \+ member(Z, Visited), route2(Z, Y, [Z|Visited], Route2), Route = [X|Route2].
route(X,Y,R) :- route1(X,Y,R); route2(X,Y,R).
私はそれは私だけ
R = [s1, s4]
、R = [s1, s2, s3, s4]
とR = [s1, s5, s4]
を与える "?- route(s1,s4,R)
" を求めるとき。 しかし、ルート(s1、s2、s5、s4)と(s1、s5、s2、s3、s4)もあります。これを修正するには?
ありがとうございます!
ありがとうございます!投稿した最初のコードと今編集したコードの間に何か重要な変更を加えましたか? – zer0kai
@ zer0kai - はい。私は少しsemplifiedしました。 – max66
でも、結果は同じですよね? – zer0kai