Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- go(Start,Dest,Route,Dist) :-
- go4([r(0,[Start])],Dest,R,R1,Dist),
- reverse(R1,Route).
- a(n,k,38). a(k,p,23). a(d,n,40). a(p,d,52). a(w,k,33). a(w,p,39).
- go4(Routes,Dest,Route,R1,Dist) :-
- shortest(Routes,Shortest,RestRoutes,Dist),
- proceed(Shortest,Dest,RestRoutes,Route,R1,Dist).
- proceed(r(Dist,Route),Dest,_,Route1,R1,Dist1) :-
- Route=[Dest|_],Dist1=Dist,R1=Route.
- proceed(r(Dist,[Last|Trail]),Dest,Routes,Route,R1,Dist1) :-
- findall(r(D1,[Z,Last|Trail]),
- legalnode(Last,Trail,Z,Dist,D1),List),
- append(List,Routes,NewRoutes),
- go4(NewRoutes,Dest,Routes,R1,Dist1).
- shortest([Route|Routes],Shortest,[Route|Rest],Dist) :-
- shortest(Routes,Shortest,Rest,Dist),
- shorter(Shortest,Route),!.
- shortest([Route|Rest],Route,Rest,Dist).
- shorter(r(M1,_),r(M2,_)) :- M1<M2.
- legalnode(X,Trail,Y,Dist,NewDist) :-
- (a(X,Y,Z) ; a(Y,X,Z)),
- not(member(Y,Trail)),
- NewDist is Dist+Z.
- run:-
- go(Start,Dest,Route,Dist),
- print(Start),
- nl,
- print(Dest),
- nl,
- print(Route),
- nl,
- print(Dist).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement