解决方案
ppath(X,Y,M,Path,[Y|Path]) :- edge(X,Y,M),\+ memberchk(Y,Path).
path(X,Y,P,SoFar,Path) :- edge(X,W,M), \+ memberchk(W,SoFar),
path(W,Y,N,[W|SoFar],Path), P is M+N.
pravilo(X,Y,Z) :-
aggregate(min(W), P^path(X,Y,W,[],P),Z).
这是我的代码。问题是起点是a,终点是z。
执行后出现错误,结果显示为[z,c,h,b]。但是正确的答案应该是[a,b,c,z]。
请帮助解决我的问题。
library(aggregate)允许witness
最小/最大标量运算。我们可以使用该功能来报告路径以及行程长度:
path(X,Y,M,Path,FullPath) :-
edge(X,Y,M), \+ memberchk(Y,Path),
reverse([Y|Path], FullPath).
path(X,Y,P,SoFar,Path) :-
edge(X,W,M), \+ memberchk(W,SoFar),
path(W,Y,N,[W|SoFar],Path), P is M+N.
pravilo(X,Y,Z,Path) :-
aggregate(min(W,P), P^path(X,Y,W,[X],P), min(Z,Path)).
注意edge / 3中有一个错别字:edge(b,e,16
应该是edge(b,e,16).
。
一旦纠正了数据库,我得到
pravilo(a,z,M,P).
M = 16,
P = [a, b, h, c, z].
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句