Contenido del curso
DFS
- 6

Cómo recorre nodos el algoritmo DFS
04:49 min - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 min - 8

Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 min - 9

Inorder, Preorder y Postorder en árboles
07:09 min - 10

Suma de caminos raíz a hoja en árboles
02:04 min - 11

Suma de caminos raíz a hoja con DFS
07:31 min - 12

Playground: Sum Root to Leaf Numbers
- 13

Implementación de Algoritmo DFS en Árboles Binarios con Golang
15:03 min - 14

Número de islas con DFS en matrices
02:32 min - 15

Problema de islas resuelto con DFS
08:50 min - 16

Playground: Number of Islands
- 17

Número de islas con DFS recursivo en Python
10:18 min - 18

Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 min - 19

Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19 min
BFS
- 20

Cómo BFS recorre grafos por niveles
02:05 min - 21

Implementación de BFS con colas en Python
08:42 min - 22

Mínimos movimientos del caballo en ajedrez
02:55 min - 23

Minimum Knight's Move con BFS
Viendo ahora - 24

Playground: Minimum Knights Moves
- 25

Resolución de Problemas de Caballos de Ajedrez con BFS en Python
17:49 min - 26

Propagación BFS en Rotting Oranges
03:50 min - 27

Resolución de Rotting Oranges usando BFS
08:43 min - 28

Playground: Rotting Oranges
- 29

Implementación de BFS para naranjas podridas
23:44 min - 30

Puente más corto entre islas con BFS
03:38 min - 31

Shortest Bridge: combina DFS y BFS
07:35 min - 32

Playground: Shortest Bridge Between Islands
- 33

Shortest Bridge con DFS y BFS en Python
14:57 min - 34

Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 min - 35

Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47 min
Backtrack
- 36

Backtracking para encontrar soluciones válidas
04:20 min - 37

Combinaciones de letras en teclado telefónico
01:51 min - 38

Combinaciones de teclado con backtracking
09:19 min - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 min - 40

Playground: Letter Combinations of a Phone Number
- 41

Generación de Direcciones IP Válidas a partir de Cadenas Numéricas
03:51 min - 42

Backtracking para generar IPs válidas
28:16 min - 43

Playground: Restore IP Addresses
- 44

Búsqueda de Palabras en Matrices: Solución y Complejidad
02:54 min - 45

Word Search con DFS y backtracking
08:30 min - 46

Playgrund: Word Search
- 47

Búsqueda de palabras en matrices con DFS
18:18 min - 48

Resolución del problema de las n reinas en ajedrez
01:08 min - 49

Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 min - 50

Combinaciones y Permutaciones con Backtracking
02:14 min
Próximos pasos
Minimum Knight's Move con BFS
Resumen
El problema Minimum Knight's Move plantea un reto clásico de algoritmos: dado un caballo en un tablero de ajedrez infinito, calcular la cantidad mínima de saltos necesarios para llegar desde una posición de origen hasta una de destino. La clave está en pensar el tablero como un grafo y aplicar Breadth First Search (BFS) para encontrar la ruta más corta.
¿Por qué un tablero de ajedrez se puede tratar como un grafo?
Cada casilla del tablero funciona como un nodo. Lo interesante es que las conexiones entre nodos no son las casillas contiguas, como pasaría con un peón, sino las casillas que respetan el movimiento en L del caballo.
Desde la posición donde está el caballo, los nodos vecinos son las ocho casillas a las que puede saltar siguiendo su patrón característico. Esa relación entre casilla y vecinos es exactamente lo que define un grafo.
¿Qué es BFS y por qué sirve aquí? Breadth First Search recorre un grafo por niveles, explorando primero todos los vecinos cercanos antes de avanzar a los lejanos. Por eso garantiza encontrar el camino más corto en número de saltos.
¿Cómo se modelan los movimientos del caballo en código?
El caballo tiene ocho direcciones posibles desde cualquier casilla [1:30]. Para representarlas, sumas o restas a las coordenadas actuales siguiendo este patrón:
- En X suma 2 o -2, y en Y suma 1 o -1.
- En X suma 1 o -1, y en Y suma 2 o -2.
Esas combinaciones generan los ocho saltos posibles. Cada salto que haces te lleva a un nuevo nodo, y desde ese nodo se abren otras ocho posibilidades.
¿Cómo aplicar BFS para contar la mínima cantidad de saltos?
La idea es avanzar por niveles desde el origen [1:50]. El nivel uno son las ocho casillas alcanzables en un solo salto. El nivel dos son las casillas alcanzables desde esas primeras ocho, y así sucesivamente.
La primera vez que el destino aparezca en alguno de los niveles, ese número de nivel es la respuesta. Como BFS explora por capas, garantizas que ningún camino más corto pasó desapercibido.
¿Qué estructuras de datos necesitas para resolverlo?
Dos estructuras hacen el trabajo pesado: una queue y un hash set. Cada una cumple un rol específico dentro del recorrido.
La queue respeta el principio FIFO, donde el primer elemento que entra es el primero que sale [3:30]. Eso es justo lo que necesitas para procesar primero las casillas de niveles cercanos antes que las de niveles lejanos. No puedes llegar a una coordenada lejana sin haber pasado por las cercanas primero.
El hash set almacena las casillas ya visitadas. Su utilidad es enorme porque consultar si un elemento existe en un hash set tiene complejidad O(1) [3:00]. Sin esta verificación, el caballo podría regresar infinitamente a casillas anteriores y nunca terminar.
¿Por qué usar un hash set en vez de una lista? Porque revisar pertenencia en una lista es O(n), mientras que en un hash set es O(1). Esa diferencia evita que el algoritmo se vuelva lento al crecer el tablero.
¿Cómo se combinan queue y hash set durante el recorrido?
El flujo funciona así de claro:
- Sacas la casilla al frente de la queue.
- Generas las ocho casillas vecinas según el movimiento del caballo.
- Por cada vecina, revisas si ya está en el hash set. Si no, la agregas al set y al final de la queue.
- Repites hasta que la casilla destino aparezca.
Cada iteración remueve la dirección actual y suma las nuevas al final de la cola. Así mantienes el orden por niveles que BFS necesita.
¿Cuál es la complejidad temporal y espacial de esta solución?
La complejidad espacial es O(n), donde n es la cantidad de pasos posibles que se exploran hasta llegar al destino [4:30]. La cola puede crecer bastante, sobre todo cuando el destino está lejos del origen.
Es una complejidad alta, pero razonable considerando que estás haciendo BFS sobre un tablero infinito. Cada nivel multiplica las posibilidades, y el hash set evita recalcular casillas ya vistas, lo que mantiene el algoritmo viable.
¿Existen soluciones más eficientes que BFS para este problema?
BFS resuelve correctamente el problema, pero no siempre es la opción óptima. Existen aproximaciones matemáticas o BFS bidireccional que pueden mejorar tanto el tiempo como la memoria utilizada.
Si tienes una propuesta con mejor complejidad, compártela en los comentarios. ¿Qué enfoque alternativo se te ocurre para reducir la cantidad de casillas exploradas?