2012-01-08 25 views
2

我得到这个代码,2个城市之间返回的最短路径:查找路径:如何避免已访问过的位置

goal(Z,Path,Cost) :- 
    A = mycity, 
    caminhAux2(A,[Z],0,Path, Cost). 

caminhAux2(A,[A|Path1],Cost1,[A|Path1],Cost1). 
caminhAux2(A,[Y|Path1],Cost1,Path,Cost) :- 
    conn(_,X,Y,Dist,N), 
    road(N,Vmed,_), 
    CostXY is Dist/Vmed, 
    Cost2 is Cost1 + CostXY, 
    caminhAux2(A,[X,Y|Path1],Cost2,Path,Cost). 

best(Z,P,C) :- 
    goal(Z,P,C), 
    \+ (goal(Z,P1,C1),C1<C). 

我怎样才能让这个以避免已经访问过的位置?这是在无限循环。

回答

1

很简单:在奇怪地命名为“caminhAux2”谓词的递归条款,似乎X不能是路径1中的一员,所以在一个地方,我离开作为练习,目标\+ member(X, Path1)可能做到这一点?