Prolog:查找从一个城市到收集城市的路线

时间:2017-11-22 01:10:31

标签: prolog

如果我有关于航班的事实清单,我该如何编写预测以逐一将所有路线从一个城市返回到列表城市?例如,从rome[moscow, amsterdam]的所有路由。

flight(london,dublin).
flight(rome,london).
flight(rome,paris).
flight(paris,dublin).
flight(berlin,moscow).
flight(paris,amsterdam).
flight(berlin,dublin).
flight(london,newyork).
flight(dublin,newyork).
flight(dublin,cork).
flight(dublin,rome).
flight(dublin,chicago).
flight(amsterdam,hongkong).
flight(london,hongkong).
flight(dublin,amsterdam).

1 个答案:

答案 0 :(得分:0)

如果有直飞航班,则存在路径:

route(X,Y,L):-
   route(X,Y,L,[X]).

route(X,Y,L,K):-
  flight(X,Y),
  reverse([Y|K],L).

如果存在某些ZZ已连接XZY相关联。

route(X,Y,L,E):-
  flight(X,Z),
  \+ member(Z,E),
  route(Z,Y,L,[Z|E]).

如果要在一个列表中找到所有路径,请使用prolog预定义谓词中的findall/3