Advertisement
Guest User

prolog

a guest
Oct 21st, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.35 KB | None | 0 0
  1. tsp1(Origem,Caminho,Custo):-criar_lista_cidades(Origem,L),branch_n_bound(Origem,L,LFinal),sort(LFinal,[(Custo,Caminho)|_]),!.
  2.  
  3. criar_lista_cidades(Orig,Lista):-findall(X,city(X,_,_),L1),eliminar(L1,Orig,Lista).
  4.  
  5. eliminar([],_,_):- !.
  6. eliminar([E|T],E ,T).
  7. eliminar([H|T],E,[H|Y]):- eliminar(T,E,Y).
  8.  
  9. branch_n_bound(_,[],[]):-!.
  10. branch_n_bound(Orig,[H|T],[(DF,CF)|LFinal]):-branch_n_bound(Orig,T,LFinal),bnb(Orig,H,L1,C),append_retorno(Orig,C,L1,CF,DF).
  11.  
  12. bnb(Orig,Dest,Cam,Custo):-
  13.     bnb2(Dest,[(0,[Orig])],Cam,Custo).
  14. bnb2(Dest,[(Custo,[Dest|T])|T2],Cam,Custo):-
  15.     calc_tam_caminho([Dest|T],Tam),
  16.     (Tam==5,reverse([Dest|T],Cam),true);
  17.     bnb2(Dest,T2,Cam,Custo).
  18. bnb2(Dest,[(Ca,LA)|Outros],Cam,Custo):-
  19.     LA=[Act|_],
  20.     findall((CaX,[X|LA]),(Dest\==Act, dist_cities(Act,X,CustoX),\+ member(X,LA), CaX is CustoX + Ca),Novos),
  21.     append(Outros,Novos,Todos),
  22.     sort(Todos,TodosOrd),
  23.     bnb2(Dest,TodosOrd,Cam,Custo).
  24.  
  25.  
  26. append_retorno(Orig,C,[H|T],CamFinal,DistFinal):-dist_ultimo_origem(Orig,[H|T],D1),append([H|T],[Orig],CamFinal),DistFinal is D1 + C.
  27.  
  28. calc_tam_caminho((_,L),Tam):-calc_tam_caminho(L,Tam).
  29. calc_tam_caminho([],0):-!.
  30. calc_tam_caminho([_|T],Tam):-calc_tam_caminho(T,Tam1), Tam is Tam1 + 1.
  31.  
  32. dist_ultimo_origem(Orig,[X],Dist):-dist_cities(X,Orig,Dist).
  33. dist_ultimo_origem(Orig,[_|T],Dist):-dist_ultimo_origem(Orig,T,Dist).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement