2012-01-08 55 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)可能做到這一點?