You are on page 1of 3

SOURCE CODE:

:-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|_],_)),

writef('%w is closer than %w \n',[[H|Path],[H|T]]),

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),

writef('Shortest path is %w with distance %w = %w\n',[Path,Dist,Distance]);

writef('There is no route from %w to %w \n',[From,To]).


OUTPUT:

You might also like