Advertisement
Guest User

Untitled

a guest
Dec 5th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.00 KB | None | 0 0
  1. go(Start,Dest,Route,Dist) :-
  2.     go4([r(0,[Start])],Dest,R,R1,Dist),
  3.     reverse(R1,Route).
  4. a(n,k,38). a(k,p,23). a(d,n,40). a(p,d,52). a(w,k,33). a(w,p,39).
  5. go4(Routes,Dest,Route,R1,Dist) :-
  6.     shortest(Routes,Shortest,RestRoutes,Dist),
  7.     proceed(Shortest,Dest,RestRoutes,Route,R1,Dist).
  8. proceed(r(Dist,Route),Dest,_,Route1,R1,Dist1) :-
  9.     Route=[Dest|_],Dist1=Dist,R1=Route.
  10. proceed(r(Dist,[Last|Trail]),Dest,Routes,Route,R1,Dist1) :-
  11.     findall(r(D1,[Z,Last|Trail]),
  12.         legalnode(Last,Trail,Z,Dist,D1),List),
  13.     append(List,Routes,NewRoutes),
  14.     go4(NewRoutes,Dest,Routes,R1,Dist1).
  15. shortest([Route|Routes],Shortest,[Route|Rest],Dist) :-
  16.     shortest(Routes,Shortest,Rest,Dist),
  17.     shorter(Shortest,Route),!.
  18. shortest([Route|Rest],Route,Rest,Dist).
  19. shorter(r(M1,_),r(M2,_)) :- M1<M2.
  20. legalnode(X,Trail,Y,Dist,NewDist) :-
  21.     (a(X,Y,Z) ; a(Y,X,Z)),
  22.     not(member(Y,Trail)),
  23.         NewDist is Dist+Z.
  24. run:-
  25.    go(Start,Dest,Route,Dist),
  26.    print(Start),
  27.    nl,
  28.    print(Dest),
  29.    nl,
  30.    print(Route),
  31.    nl,
  32.    print(Dist).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement