首页 > 解决方案 > prolog图遍历的访问节点中无法获取第一个节点

问题描述

我找到了一个基于 Prolog 的寻路算法。

这是 graph_traversal.P 文件的内容。

path(X,Y,P) :- path_aux(X,Y,[Y],P).
path_aux(X,Y,L,[X|L]) :- arc(X,Y).
path_aux(X,Y,L,P) :- arc(Z,Y), not(member(Z,L)), path_aux(X,Z,[Z|L],P).

我以对的形式提供了一个弧列表。当我使用以下行查询时

command = "path(" + start + "," + end+ ", P)"
for item in prolog.query(command):
  print("item", item)

我在 item var 中得到类似的东西

开始:Middle0, [Middle1, Middle 2, ..., End]

我希望有这样的东西

[开始,中间0,中间1,中间2,...,结束]

我不知道 Prolog,但我必须解决这个问题。你能帮我解决这个问题吗?

标签: pythonprolog

解决方案


下面的行解决了这个问题。

path(A,B,Path) :- 
   travel(A,B,[A],Q), 
   reverse(Q,Path).

travel(A,B,P,[B|P]) :- 
   arc(A,B).
travel(A,B,Visited,Path) :- 
   arc(A,C), 
   C \== B, 
   \+member(C,Visited), 
   travel(C,B,[C|Visited],Path).

推荐阅读