Graph Traversal explora todos los nodos de un grafo sistemáticamente usando BFS (Breadth-First Search) o DFS (Depth-First Search). Ambas son O(V + E) pero tienen comportamientos muy distintos.
BFS explora por niveles (como olas); DFS se hunde hasta el fondo antes de retroceder (como un laberinto).
Cómo Funciona
BFS
- Inicializa queue con nodo fuente,
visited[fuente] = true. - Mientras queue no esté vacía:
- Extrae nodo
u. - Por cada vecino
vdeu: si no visitado, marca y encola.
- Extrae nodo
DFS
- Inicializa stack con nodo fuente, o recursión.
- Marca nodo como visitado.
- Por cada vecino no visitado: recursión DFS.
Idea Clave
BFS usa una queue (FIFO): explora todos los nodos a distancia d antes que los de distancia d+1. Eso garantiza shortest path en grafos sin peso.
DFS usa un stack (LIFO) o recursión (call stack): se hunde hasta un dead end, luego retrocede. No garantiza shortest path.
Ejemplo Trabajado
Grafo:
0: 1, 2
1: 0, 3, 4
2: 0, 5
3: 1
4: 1, 5
5: 2, 4
Fuente: 0.
BFS orden: 0, 1, 2, 3, 4, 5 (por niveles). DFS orden: 0, 1, 3, 4, 5, 2 (depende de orden de vecinos).
Casos Extremos y Trampas
- Grafo con ciclos — visited set es crítico para evitar loops infinitos.
- Grafo desconectado — itera sobre todos los nodos como fuente para connected components.
- Directed graph — DFS no puede ir en reversa a menos que guardes aristas reversas.
- BFS para shortest path — solo funciona en unweighted graphs.
Comparación
| Algoritmo | Estructura | Orden | Shortest path (unweighted) |
|---|---|---|---|
| BFS | Queue | Por niveles | Sí |
| DFS | Stack/Recursion | Por profundidad | No |
Aplicaciones
- Shortest path — BFS en redes sociales (grados de separación)
- Cycle detection — DFS en directed graphs
- Topological sort — DFS con post-order
- Connected components — BFS/DFS desde cada nodo no visitado
- Maze solving — DFS para backtracking, BFS para shortest exit
Trayectoria de Práctica
- Implementa BFS y DFS; traza el ejemplo en el visualizador.
- Verifica BFS shortest path en unweighted graph.
- Implementa connected components: cuenta cuántos componentes conexos.
- Investiga bidirectional BFS: ¿por qué reduce el search space?
- Investiga DFS para topological sort: ¿por qué post-order reverse?