Prolog-如何在获取所有路径时限制路径长度?

Prolog-如何在获取所有路径时限制路径长度?,prolog,graph-theory,Prolog,Graph Theory,我试图在一个图中的两个节点之间找到所有大小小于给定长度的路径。我能够找到所有路径,但我在限制路径大小方面遇到了问题 我现在得到的是: path(P1,P2,[P1,P2]):- edge(P1,P2). path(P1,P2,[P1|Xs]):- edge(P1,W), path(W,P2,Xs). 这是可行的,如何限制路径大小?您可以尝试: limited_path(P1,P2,N,L):-length(L,N1), path(P1,P2,L), N1=<N

我试图在一个图中的两个节点之间找到所有大小小于给定长度的路径。我能够找到所有路径,但我在限制路径大小方面遇到了问题

我现在得到的是:

path(P1,P2,[P1,P2]):- 
    edge(P1,P2).

path(P1,P2,[P1|Xs]):-
    edge(P1,W),
    path(W,P2,Xs).
这是可行的,如何限制路径大小?

您可以尝试:

limited_path(P1,P2,N,L):-length(L,N1), path(P1,P2,L), N1=<N.

path(P1,P2,[P1,P2]):- 
    edge(P1,P2).

path(P1,P2,[P1|Xs]):-
    edge(P1,W),
    path(W,P2,Xs).

limited_path(P1,P2,N,L):-length(L,N1),path(P1,P2,L),N1=您想限制路径长度,还是真的想避免导致路径冗余并最终缺少程序终止的循环?如果是后者,那么限制路径长度不是正确的方法。我希望所有路径的长度都短于或等于给定的路径,因为这就是我解决问题所需要的。好的,谢谢,这更清楚一点,但当你说“给定一条”时,这意味着什么?您是否提供长度?或者你说的是“给定路径”?对不起,我说得不清楚。我打算做的,下面的答案已经基本涵盖了,是这样的:allpath(Node1,Node2,List,MaxLength)返回长度等于给定路径的路径。这就解决了我的问题。非常感谢。但是,我该如何改变这一点,以使所有路径返回的长度等于或短于给定路径?@MiguelFreitas,对不起,我的错误编辑了答案,希望能有所帮助!!多谢各位。我刚刚开始使用Prolog,但我仍然无法以递归的方式进行思考。谢谢你的帮助。