Guest

hpacheco

By: a guest on Mar 19th, 2010  |  syntax: Prolog  |  size: 1.33 KB  |  hits: 98  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. inicio(b(0,0)).
  2. objectivo(b(2,_)).
  3.  
  4. sucessor(b(X,Y), b(0,Y)):- X>0. % esvaziar X
  5. sucessor(b(X,Y), b(4,Y)):- X < 4. % encher X
  6. sucessor(b(X,Y), b(X,0)):- Y > 0. % esvaziar Y
  7. sucessor(b(X,Y), b(X,3)):- Y < 3. % encher Y
  8. sucessor(b(X,Y), b(X1,3)):- Y < 3, X > 0, (X + Y) >= 3, X1 is X - (3 - Y). % esvaziar X para o Y até Y ficar cheio
  9. sucessor(b(X,Y), b(0,Y1)):- X > 0, Y < 3, (X + Y) =< 3, Y1 is (X + Y). % despejar X até X ficar vazio
  10. sucessor(b(X,Y), b(4,Y1)):- Y < 3, (X + Y) >= 4, Y1 is Y - (4 - X). % esvaziar Y para o X ate X ficar cheio                                                        
  11. sucessor(b(X,Y), b(X1,0)):- Y > 0, X < 3, (X + Y) =< 3, X1 is (X + Y). % despejar Y até o Y ficar vazio
  12.  
  13. % dfs
  14.  
  15. resolve_dfs:-
  16.         inicio(Ei),
  17.         dfs(Ei, [Ei], S),
  18.         write(S).
  19.  
  20. % caso base
  21. dfs(E, _, [E]):- objectivo(E).
  22. % adiciona V aos estados já visitados
  23. dfs(E, V, [E|R]):-
  24.         sucessor(E,E2), not(member(E2, V)), dfs(E2, [E2|V], R).
  25.        
  26. % bfs
  27.  
  28. resolve_bfs:-
  29.         inicio(Ei),
  30.         bfs( [[Ei]], S),
  31.         reverse(S, S1),
  32.         write(S1).
  33.  
  34. % caso base
  35. bfs( [[E|Cam]|_], [E|Cam]):- objectivo(E).
  36.  
  37. bfs( [[E|Cam]|R], S):-
  38.         % os filhos vão ser encontrados através de uma lista
  39.         %  que contem o caminho até ao pai e o pai
  40.         findall( [E2, E|Cam], (sucessor(E,E2), not(member(E2,[E|Cam]))), LS),
  41.         append(R, LS, L), bfs(L, S).