fork download
  1. using Random
  2. using Dates # Para medir el tiempo de ejecución
  3.  
  4. # Definir el grafo como un diccionario de listas de adyacencia
  5. function create_graph(nodes::Int, edges::Int)
  6. graph = Dict{Int, Vector{Int}}()
  7. for i in 1:nodes
  8. graph[i] = []
  9. end
  10. for _ in 1:edges
  11. u = rand(1:nodes)
  12. v = rand(1:nodes)
  13. push!(graph[u], v)
  14. end
  15. return graph
  16. end
  17.  
  18. # Implementación de DFS
  19. function dfs(graph::Dict{Int, Vector{Int}}, start::Int)
  20. visited = Set{Int}()
  21. stack = [start]
  22. while !isempty(stack)
  23. node = pop!(stack)
  24. if node ∉ visited
  25. push!(visited, node)
  26. for neighbor in graph[node]
  27. push!(stack, neighbor)
  28. end
  29. end
  30. end
  31. return visited
  32. end
  33.  
  34. # Implementación de BFS
  35. function bfs(graph::Dict{Int, Vector{Int}}, start::Int)
  36. visited = Set{Int}()
  37. queue = [start]
  38. while !isempty(queue)
  39. node = popfirst!(queue)
  40. if node ∉ visited
  41. push!(visited, node)
  42. for neighbor in graph[node]
  43. push!(queue, neighbor)
  44. end
  45. end
  46. end
  47. return visited
  48. end
  49.  
  50. # Configurar el grafo
  51. nodes = 1000 # Cambia este valor para modificar el tamaño
  52. edges = 5000 # Cambia este valor para modificar el tamaño
  53. graph = create_graph(nodes, edges)
  54.  
  55. # Temporizador y ejecución
  56. start_time = now()
  57. visited_dfs = dfs(graph, 1)
  58. dfs_time = now() - start_time
  59.  
  60. start_time = now()
  61. visited_bfs = bfs(graph, 1)
  62. bfs_time = now() - start_time
  63.  
  64. println("DFS Tiempo de ejecución: $dfs_time")
  65. println("BFS Tiempo de ejecución: $bfs_time")
  66.  
Success #stdin #stdout 0.51s 224896KB
stdin
Standard input is empty
stdout
DFS Tiempo de ejecución: 55 milliseconds
BFS Tiempo de ejecución: 15 milliseconds