Поиск путей: как избежать уже посещенных локаций - PullRequest
2 голосов
/ 08 января 2012

Я получил этот код, чтобы вернуть кратчайший путь между двумя городами:

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 Ответ

1 голос
/ 08 января 2012

Легко: В рекурсивном предложении странно названного предиката "caminhAux2" кажется, что X не должен быть членом Path1, поэтому в месте, которое я оставляю как упражнение, цель \+ member(X, Path1) могла бы это сделать?

...