Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. liga(hall,corredor,90,190).
  2. liga(hall,sala,160,190).
  3. liga(sala,cozinha,90,190).
  4. liga(cozinha,corredor,100,200).
  5. liga(cozinha,lavandaria,80,180).
  6. liga(cozinha,arrumos,80,180).
  7. liga(corredor,wc,90,200).
  8. liga(corredor,quarto1,95,200).
  9. liga(corredor,quarto2,95,200).
  10. liga(corredor,quarto_suite,120,200).
  11. liga(quarto_suite,wc_suite,90,200).
  12. liga(quarto_suite,terraço,200,200).
  13. liga(sala,terraço,240,200).
  14.  
  15. %a)
  16. ppp(X,Y,Z,LP,AP,T):-
  17. (Z =< AP,(Y=<LP;X=<LP) -> T = 'n';
  18. Y =< AP,(Z=<LP;X=<LP) -> T = 'y';
  19. X =< AP ,(Y=<LP;Z=<LP)-> T = 'x').
  20.  
  21. %b)
  22. %caminho(_,_,_,Div_Chegada,Div_Chegada,[Div_Chegada],0):-!.
  23. %caminho(X,Y,Z,Div_Partida,Div_Chegada,Lista_Divisoes,N):-
  24. % liga(Div_Partida,Div_Chegada,LP,AP),
  25. % ppp(X,Y,Z,LP,AP,T),
  26. % (T == 'y'; T == 'x' -> N = 1),
  27. % Lista_Divisoes = [Div_Partida,Div_Chegada].
  28.  
  29. %caminho(X,Y,Z,Div_Partida,Div_Chegada,Lista_Divisoes,N).
  30.  
  31. caminho(X,Y,Z,Div_Partida,Div_Chegada,Lista_Divisoes,N):-
  32. caminho2(X,Y,Z,Div_Chegada,[Div_Partida],Lista_Divisoes,0,N).
  33.  
  34. caminho2(_,_,_,Dest,[Dest|T],[Dest|T],N,N).
  35. caminho2(X,Y,Z,Dest,[H|T],LD,NT,N):-
  36. %evitar backtracking
  37. H\==Dest,
  38. %liga��o bi-direccional
  39. (liga(H,NDiv,LP,AP);liga(NDiv,H,LP,AP)),
  40. %evitar caminhos circulares
  41. \+ member(NDiv,[H|T]),
  42. %a porta permite passagem
  43. %testar tipo de tombo para actualizar coordenadas e contar tombos
  44. ppp(X,Y,Z,LP,AP,Tombo),
  45. (
  46. (Tombo==n,
  47. caminho2(X,Y,Z,Dest,[NDiv,H|T],LD,NT,N));
  48. (Tombo==x,
  49. NT1 is NT+1,
  50. caminho2(Z,Y,X,Dest,[NDiv,H|T],LD,NT1,N));
  51. (Tombo==y,
  52. NT1 is NT+1,
  53. caminho2(X,Z,Y,Dest,[NDiv,H|T],LD,NT1,N))
  54. ).
  55.  
  56. %c)
  57. todos_caminhos(X,Y,Z,Div_Partida,Div_Chegada,LL):-
  58. findall(p(N,Lista_Divisoes),caminho(X,Y,Z,Div_Partida,Div_Chegada,Lista_Divisoes,N),LL).
  59.  
  60. %d)
  61. menosdivtomb(X,Y,Z,Div_Partida,Div_Chegada,Lista_Divisoes):-
  62. todos_caminhos(X,Y,Z,Div_Partida,Div_Chegada,[P|LL]),
  63. menos_divisoes(LL,P,Lista_Divisoes).
  64.  
  65. menos_divisoes([],P,L):- P = p(_,L).
  66. menos_divisoes([PAtual|LL],PAnt,L):-
  67. PAnt = p(NAnt,LAnt),
  68. PAtual = p(NAtual,LAtual),
  69. length(LAnt,LenAnt),
  70. length(LAtual,LenAtual),
  71. (LenAnt < LenAtual -> menos_divisoes(LL,PAnt,L);
  72. LenAnt == LenAtual -> (NAnt < NAtual -> menos_divisoes(LL,PAnt,L);
  73. menos_divisoes(LL,PAtual,L));
  74. LenAnt > LenAtual -> menos_divisoes(LL,PAtual,L)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement