Professional Documents
Culture Documents
:-dynamic
rpath/2.
edge(a,b,7).
edge(a,c,9).
edge(b,c,10).
edge(b,c,10).
edge(b,d,15).
edge(c,d,11).
edge(d,e,6).
edge(a,f,14).
edge(c,f,2).
edge(e,f,9).
path(From,To,Dist):-edge(To,From,Dist).
path(From,To,Dist):-edge(From,To,Dist).
shorterPath([H|Path],Dist):-
rpath([H|T],D),!,Dist<D,
retract(rpath([H|_],_)),
assert(rpath([H|Path],Dist)).
shorterPath(Path,Dist):-
writef('New Path:%w\n',[Path]),
assert(rpath(Path,Dist)).
traverse(From,Path,Dist):-
path(From,T,D),
not(memberchk(T,Path)),
shorterPath([T,From|Path],Dist+D),
traverse(T,[From|Path],Dist+D).
traverse(From):-
retractall(rpath(_,_)),
traverse(From,[],0),
traverse(_).
go(From,To):-
traverse(From),
rpath([To|Rpath],Dist)->
reverse([To|Rpath],Path),
Distance is round(Dist),