无法获取序言图遍历的已访问节点中的第一个节点
Can not get first node in the visited nodes of prolog graph traversal
我找到了一个基于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)
我在项目 var
中得到了这样的东西
Start: Middle0, [Middle1, Middle 2, ..., End]
我希望有这样的东西
[Start, Middle0, Middle1, Middle 2, ..., End]
我不懂Prolog,但我必须解决这个问题。你能帮我解决这个问题吗?
下面几行解决了问题。
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).
我找到了一个基于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)
我在项目 var
中得到了这样的东西Start: Middle0, [Middle1, Middle 2, ..., End]
我希望有这样的东西
[Start, Middle0, Middle1, Middle 2, ..., End]
我不懂Prolog,但我必须解决这个问题。你能帮我解决这个问题吗?
下面几行解决了问题。
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).