fork download
  1. :- dynamic edge/2.
  2.  
  3. generar_grafo(N) :-
  4. retractall(edge(_,_)),
  5. Limite is N - 1,
  6. forall(
  7. between(0, Limite, X),
  8. (
  9. X < Limite ->
  10. Y is X + 1,
  11. assertz(edge(X,Y))
  12. ;
  13. )
  14. ).
  15.  
  16. dfs(Nodo, Visitados, Resultado) :-
  17. member(Nodo, Visitados),
  18. Resultado = Visitados.
  19.  
  20. dfs(Nodo, Visitados, Resultado) :-
  21. \+ member(Nodo, Visitados),
  22.  
  23. Vecino,
  24. edge(Nodo,Vecino),
  25. Vecinos
  26. ),
  27.  
  28. dfs_lista(
  29. Vecinos,
  30. [Nodo|Visitados],
  31. Resultado
  32. ).
  33.  
  34. dfs_lista([], Visitados, Visitados).
  35.  
  36. dfs_lista([H|T], Visitados, Resultado) :-
  37. dfs(H, Visitados, Temp),
  38. dfs_lista(T, Temp, Resultado).
  39.  
  40. ejecutar :-
  41. generar_grafo(10000),
  42.  
  43. statistics(runtime,[T0|_]),
  44.  
  45. dfs(0, [], Resultado),
  46.  
  47. statistics(runtime,[T1|_]),
  48.  
  49. statistics(memory, Memoria),
  50.  
  51. Tiempo is T1 - T0,
  52.  
  53. length(Resultado, Cantidad),
  54.  
  55. format('Nodos visitados: ~w~n', [Cantidad]),
  56. format('Tiempo (ms): ~w~n', [Tiempo]),
  57. format('Memoria (bytes): ~w~n', [Memoria]).
Success #stdin #stdout #stderr 0.03s 6940KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit