Saltar al contenido principal
Interactive Algorithm Education

Visualize & Master Algorithms & Data Structures

Explore classic & modern sorting algorithms, efficient searching techniques, and interactive data structure visualizations — all with real-time step-by-step animation, comparisons, swaps, and Big-O metrics.

Graph Algorithms Visualizer

DFS — Depth-First Search

Time O(V + E) · Space O(V)
Paso 0 / 0
Speed 100ms
Step Progress 0 / 0
Visited 0
Frontier 0
Status Ready
Unvisited
Start
Active
Visited
MST / SPT
Rejected
SCC component

Queue

Step Explanation

Select an algorithm and press Play to begin.

Pseudocode
 

Búsqueda en Profundidad (DFS)

Elementary (2/5) ~45 minutos Exploración profunda primero Pila / recursividad Detección de ciclos Orden topológico Prereqs: Grafos 101, Recursión
Quick Reference

Depth-First Search

DFS is a graph traversal algorithm that explores as far as possible along each branch before backtracking, using a LIFO stack.

Difficulty: Elementary (2/5) graph

Complexity

Best Time
O(V + E)
Average Time
O(V + E)
Worst Time
O(V + E)
Space
O(V)

When to Use

Use DFS for topological sorting, cycle detection, connected components, solving puzzles with single-path solutions, and tree traversals.

Pros

  • Low memory footprint compared to BFS on deep graphs
  • Naturally recursive formulation
  • Useful for topological ordering and cycle detection

Cons

  • Does not find shortest paths
  • Can get stuck in infinite loops on infinite graphs without visited tracking
  • Recursive implementation may overflow the stack on deep graphs

History

DFS has been studied since the 19th century as a maze-solving strategy. Its computer science formalization dates to the 1960s with depth-first search of trees by John Hopcroft and Robert Tarjan.

Búsqueda en Profundidad (DFS) explora un grafo yéndose lo más lejos posible por cada rama antes de retroceder — como un laberinto donde sigues una pared hasta chocar y luego regresas.

Implementado con una pila explícita o recursión (que usa la pila de llamadas), DFS es la herramienta para problemas donde el orden de descubrimiento importa: ciclos, componentes conexos, orden topológico y caminos específicos.

Cómo Funciona

  1. Inicializa: marca todos los nodos como no visitados.
  2. Elige un nodo fuente, visita sus vecinos no visitados en profundidad antes de considerar alternativas.
  3. Retrocede cuando no hay más vecinos sin visitar.
  4. Repite para cualquier componente no visitado (grafo no conexo).

Idea Clave

DFS no garantiza el camino más corto — prioriza la profundidad sobre la amplitud. Su superpoder es la clasificación de aristas durante el retroceso: con temporizadores discovery y finish, puedes distinguir árbol, retroceso, adelante y cruzada. Esa estructura resuelve ciclos, componentes fuertemente conexos y orden topológico en una sola pasada.

Ejemplo Trabajado

Fuente S en el visualizador:

FaseNodoVecinos exploradosAcción
1SA, BVisita A
2AC, DVisita C
3CEVisita E
4E—Backtrack a C
5CDVisita D
6D—Backtrack a A → S
7SBVisita B
8BFVisita F
9F—Backtrack a B → S

Orden discovery: S, A, C, E, D, B, F. Observa el visualizador colorear aristas por tipo y mostrar la pila creciendo/decreciendo.

Casos Extremos y Trampas

  • Grafos con ciclos — sin visitados, DFS gira infinitamente.
  • Grafos muy profundos — la recursión puede desbordar la pila; usa una pila explícita.
  • Grafos muy anchos — O(V) de memoria en la pila/llamadas.
  • Múltiples componentes — itera sobre todos los nodos para cubrir componentes no alcanzados desde la fuente.

Comparación con BFS

AspectoDFSBFS
EstructuraPila (LIFO / recursión)Cola (FIFO)
Camino más cortoNo garantizadoSí (no ponderado)
MemoriaO(h) alturaO(V) ancho
Natural paraCiclos, topológico, SCCCaminos mínimos, niveles

Aplicaciones

  • Detección de ciclos — aristas de retroceso en directed graphs
  • Orden topológico — salida en orden finish decreciente
  • Componentes fuertemente conexos — Kosaraju / Tarjan
  • Resolución de laberintos — backtracking hasta hallar salida
  • Generación de laberintos — DFS recursivo back-tracker

Trayectoria de Práctica

  1. Ejecuta DFS a mano desde S en el grafo del visualizador, dibujando el árbol DFS y clasificando cada arista.
  2. Identifica las aristas de retroceso y explica por qué equivalen a ciclos en grafos dirigidos.
  3. Genera un orden topológico desde el orden finish decreciente de DFS en un DAG.
  4. Extiende DFS para contar componentes conexos en un grafo no dirigido.