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
08:11 min - 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
Viendo ahora - 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
Shortest Bridge: combina DFS y BFS
Resumen
El problema Shortest Bridge plantea un reto clásico de grafos: dado un mapa con dos islas, encontrar la menor cantidad de material necesaria para construir un puente que las conecte. Aprenderás a combinar DFS y BFS para resolverlo paso a paso, una técnica útil si te preparas para entrevistas técnicas o estudias estructuras de datos.
El mapa se representa como una matriz de ceros y unos, donde el cero es agua y el uno es tierra. Tu meta es calcular la distancia más corta entre las dos islas y devolver cuántas casillas de agua necesitas atravesar para unirlas.
¿Cómo identificar la primera isla con DFS?
El primer subproblema consiste en detectar dónde empieza y termina una de las islas. Aquí entra en juego Depth First Search, una técnica que ya hemos trabajado en el módulo de DFS para encontrar islas en una matriz.
La idea es simple: recorres la matriz hasta encontrar el primer uno, y desde ahí profundizas hacia sus casillas adyacentes mientras sigan siendo tierra. Mientras avanzas, vas guardando los bordes de la isla en un stack, porque esos bordes serán tu punto de partida para la siguiente fase.
¿Por qué usar DFS para encontrar la primera isla? Porque DFS te permite recorrer todas las casillas conectadas de la isla y registrar sus bordes, que son justamente las casillas desde donde tendrás que empezar a tender el puente.
¿Cómo encontrar la distancia más corta con BFS?
Una vez tienes los bordes de la primera isla, necesitas avanzar hacia la segunda usando la menor cantidad de pasos posibles. Aquí es donde Breadth First Search brilla, porque explora nivel por nivel y garantiza encontrar el camino más corto [02:30].
Tu cola de BFS no inicia con un solo punto, sino con todas las coordenadas del borde de la primera isla. Desde ahí avanzas en todas las direcciones adyacentes (arriba, abajo, izquierda, derecha) hacia las casillas de agua. Cada nivel completo de expansión equivale a una unidad de material del puente.
Para evitar revisitar casillas, conviene usar un hash set donde guardas las coordenadas ya exploradas. El hash set tiene mejor complejidad de búsqueda que una lista, así que verificar si una casilla ya fue visitada se vuelve eficiente.
¿Cuándo se detiene el BFS?
El recorrido se detiene en el momento en que tu casilla actual tiene valor uno, lo que significa que tocaste la segunda isla. En ese punto retornas la cantidad de niveles que recorriste por el agua.
¿Qué retorna exactamente el algoritmo? La cantidad de niveles recorridos menos uno, porque el último salto ya cae sobre tierra y no cuenta como material del puente.
Este detalle es fácil de pasar por alto. Si haces dos saltos pero el segundo aterriza en la otra isla, la distancia real del puente es de uno, no de dos.
¿Por qué combinar DFS y BFS en el mismo problema?
La combinación funciona porque cada técnica resuelve una mitad distinta del problema. DFS es ideal para mapear una región conectada (la primera isla y sus bordes), mientras que BFS es óptimo para calcular distancias mínimas en una matriz sin pesos.
Algunos puntos clave para tener presentes al implementar la solución:
- Inicializa la cola del BFS con todas las coordenadas del borde de la primera isla, no con una sola.
- Usa un hash set para registrar casillas visitadas y evitar ciclos.
- Avanza únicamente por casillas con valor cero (agua).
- Detén el BFS cuando encuentres una casilla con valor uno.
- Retorna el número de niveles menos uno como respuesta final.
¿Podrías invertir el orden y usar primero BFS para detectar la isla y luego DFS para encontrar la distancia más corta? Deja tu respuesta en los comentarios, junto con tu análisis de la complejidad temporal y espacial de esta solución. Nos vemos en la siguiente clase para implementarlo en código.