0
我在prolog中創建了一個程序,它應該給我兩個站之間的所有可能的路線。在每條路線上,每個車站只能訪問一次。到目前爲止我的代碼是:序言中的循環路線程序
% facts
connection(s1,s2).
connection(s1,s4).
connection(s2,s3).
connection(s2,s5).
connection(s3,s4).
connection(s4,s5).
connection(s5,s6).
connection(s6,s1).
% predicates
direction1(X,Y) :- connection(X,Y).
direction2(X,Y) :- connection(Y,X).
route1(X,Y,R):- route1(X,Y,[],R).
route1(X,Y,_,[X,Y]) :- direction1(X,Y).
route1(X,Y,L,R) :- \+direction1(X,Y), direction1(X,Z), \+member(Z,L), route1(Z,Y,[Z|L],RZ), R=[X|RZ].
route2(X,Y,R):- route2(X,Y,[],R).
route2(X,Y,_,[X,Y]) :- direction2(X,Y).
route2(X,Y,L,R) :- \+direction2(X,Y), direction2(X,Z), \+member(Z,L), route2(Z,Y,[Z|L],RZ), R=[X|RZ].
route(X,Y,R) :- route1(X,Y,R); route2(X,Y,R).
的問題是,序言不給我所有路線,爲exampel當我問路由[S1,S4,R],序言不給我的路線[ S1,S2,S3,S4]。我認爲這是由「+ direction1(X,Y)」和「+ direction2(X,Y)」造成的。但是我需要這個防止在一條路線上多次訪問站的序言。任何想法如何解決這一問題?
那麼它不會給我所有的路線... – zer0kai
什麼不能給你所有的路線,我在第一段中描述的變化還是在第二段中描述的變化?它不給你哪些路線? –
例如,當我詢問「route(s2,s5,R)」時,它只給出「R = [s2,s5]」,但也存在類似[s2,s3,s4,s5]的路由。 – zer0kai