我得到了一个弧列表:
arc(a,b).
arc(b,c).
arc(c,d).
arc(d,b).
arc(d,e).
arc(e,e).
arc(e,f).
我写了一组子句,它们会告诉我是否有从 nodeX
到 node的路径Y
。可能会出现循环,我已经解释过了。
path(X,Y) :-
arc(X,Y).
path(X,Y) :-
arc(X,Z),
path(Z,Y,[X]).
path(X,Y,P) :-
arc(X,Y).
path(X,Y,P) :-
\+ member(X,P),
arc(X,Z),
append([X],P,L),
path(Z,Y,L).
我需要修改它以在成功时返回已遍历的节点列表。我不清楚我将如何做到这一点。
我假设我的基本情况类似于path2(X,Y,[X,Y]) :- arc(X,Y).
但不适用于我的程序。我对上一部分的解决方案有问题,还是我只是缺少一个小修改?任何帮助,将不胜感激。谢谢!