我想製作一個應該給出兩個站之間所有可能路線的程序。我遇到的問題是它並沒有給我所有的路線。到目前爲止我的代碼是:有向圖中的所有路線
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).
例如,當我問 「?- route(s1,s4,R)
」 只給了我R = [s1, s4]
,R = [s1, s2, s3, s4]
和R = [s1, s5, s4]
。 但也有路線(s1,s2,s5,s4)和(s1,s5,s2,s3,s4),我不知道爲什麼我沒有得到它們。如何解決這個問題?
在此先感謝!
謝謝!您在發佈的第一個代碼和您現在編輯的第一個代碼之間做出了任何必要的更改? – zer0kai
@ zer0kai - 是;我只有一點點。 – max66
好的,但結果是一樣的,對吧? – zer0kai