Grafos 02 - Recorridos

Al igual que para los árboles binarios, existen dos formas básicas de recorrer grafos: en profundidad (depth) y anchura (breadth).

La estrategia de DFS se puede resumir así:

dfs(v: Vertex)
----------------------
1.  Mark v as visited
2.  for (each unvisited vertex u adjacent to v)
3.    dfs(u)

Observaciones:

bfs(v: Vertex)
----------------------------------
1.  q is an empty queue
2.  // Add v to queue and mark it
3.  q.enqueue(v)
4.  Mark v as visited
5.  while (!q.isEmpty()) {
6.     q.dequeue(w)
7.     for (each unvisited vertex u adjacent to w) {
8.        Mark u as visited
9.        q.enqueue(u)
10.    }
11. } 

Observaciones:

Ejercicios

  1. En https://visualgo.net/en/dfsbfs, escoge algunas de los grafos de ejemplo y trata de predecir su orden de visita usando BFS y DFS. Luego simúlalos y corrobora tus contestaciones.

  2. ¿Cómo compara el tiempo de ejecución de un grafo no-dirigido completo de 10 nodos vs otro grafo no-dirigido completo de 20 nodos?

  3. ¿Cómo modificarías DFS para que solo recorra hasta nodos que queden a un máximo de distancia 2 del nodo inicial? Por ejemplo, para el siguiente grafo si comenzaramos el recorrido en el nodo 3 visitariamos a 2,4,6,7 y 5 pero no a 1.

  4. ¿Cómo modificarías BFS para que solo recorra hasta nodos que queden a un máximo de distancia 2 del nodo inicial?