Introducción
Estructuras de Datos: Grafos y Árboles en Profundidad
Estructuras de Árbol: Nodos, Raíces y Jerarquías
Recursión y secuencia de Fibonacci en programación
Aplicaciones Prácticas de Grafos en Tecnología
Representación de Grafos: Matriz y Lista de Adyacencia
DFS
Recorrido en Profundidad (DFS) en Árboles y Grafos
Algoritmo DFS en JavaScript: Búsqueda en Árboles
Búsqueda en Profundidad (DFS) en Grafos: Iterativa y Recursiva
Recorridos en Árboles: Inorder, Preorder y Postorder
Suma de Números en Caminos Raíz-Hoja en Árboles Binarios
Suma de Caminos en Árbol con DFS en Python
Playground: Sum Root to Leaf Numbers
Implementación de Árboles Binarios en Golang
Algoritmo DFS para Contar Islas en Matrices Binarias
Conteo de Islas en Matrices con DFS
Playground: Number of Islands
Programación Recursiva: Resolver Problemas con DFS en Python
Rellenar Sección de Imagen con Algoritmo DFS
Búsqueda en Profundidad para Procesamiento de Imágenes
BFS
Algoritmo BFS: Exploración en Anchura de Grafos y Árboles
Implementación de BFS en Árboles con Python
Algoritmo BFS para mover el caballo de ajedrez
Saltos mínimos con caballo en ajedrez infinito: Resuelve BFS.
Playground: Minimum Knights Moves
Suma de matrices en Python: Paso a Paso
Propagación de Plagas en Matrices: Cálculo de Días Totales
Propagación de plagas con BFS en matrices cuadradas
Playground: Rotting Oranges
Matrices y Algoritmos: Implementación en Java
Puente más Corto entre Islas en Matrices Binarias
Construcción de Puentes Cortos entre Islas en Matrices Numéricas
Playground: Shortest Bridge Between Islands
Resuelve problemas con el algoritmo Breadth-First Search en Python
Búsqueda Breadth-First (BFS) en Grafos: Conceptos y Ejercicios
Búsqueda en Anchura para Problemas de Grafos
Backtrack
Solución de Problemas con Algoritmo Backtracking en Laberintos
Combinaciones de Letras en Números Telefónicos
Combinaciones de Letras en Números Telefónicos con Backtracking
C++: Generación de combinaciones en un teclado numérico
Playground: Letter Combinations of a Phone Number
Formación de direcciones IP válidas a partir de cadenas numéricas
Algoritmo para Crear Direcciones IP Válidas en C++
Playground: Restore IP Addresses
Resolución del Problema Word Search en Tableros MxN
Búsqueda de palabras en matrices usando backtracking y DFS
Playgrund: Word Search
Búsqueda de Palabras en Matrices con JavaScript
Algoritmos para resolver N-Reinas en Python
Programación backtracking para resolver Sudoku
Combinaciones Únicas de Sumas de Enteros
Próximos pasos
Árboles AVL: Balanceo Automático en Estructuras de Datos
Algoritmos de Búsqueda Eficientes y Su Aplicación Práctica
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
El problema de Shortest Bridge nos invita a optimizar la construcción de un puente entre dos islas en un mapa representado por ceros y unos. Los ceros representan agua y los unos, tierra. Aunque el objetivo parece simple, la solución implica una combinación ingeniosa de los algoritmos DFS y BFS para determinar el camino más corto posible. A lo largo de este proceso, utilizamos técnicas fundamentales que ya hemos trabajado en ejercicios anteriores. ¡Así que recuerda repasar la búsqueda en profundidad antes de continuar!
Para detectar la primera isla, empleamos DFS (Depth-First Search). Este algoritmo permite profundizar desde el primer cuadro donde encontramos un "1", lo que identifica el inicio de la isla. Este es un punto de referencia crítico para nuestro problema, ya que desde aquí comenzamos a marcar los bordes de esta isla. Estos límites son esenciales, pues luego servirán como punto de partida para explorar posibles rutas al construir el puente hacia la segunda isla.
Una vez identificados los bordes de la primera isla, es crucial decidir dónde están las dos islas más cerca. La construcción del puente será óptima en el punto donde la distancia entre ambas islas sea mínima.
Para abordar este problema, utilizamos BFS (Breadth-First Search). Avanzamos nivel por nivel desde los bordes de la primera isla hasta encontrar suelo, es decir, cuando nos topamos con un "1" de la segunda isla:
El número de niveles de BFS que recorremos en el agua nos da la cantidad de material necesario. Sin embargo, tomemos en cuenta que cuando alcanzamos tierra (un "1"), no necesitamos incluir ese nivel en el conteo. El conteo de niveles avanzados menos uno nos proporciona la distancia correcta:
Esta mezcla de DFS y BFS nos brinda una solución eficiente y optimizada para el problema.
Podríamos preguntarnos si es posible invertir las estrategias, utilizando primero BFS y luego DFS. Te animo a reflexionar sobre esto y compartir tus ideas en los comentarios. Estas discusiones enriquecen nuestra comprensión y nos permiten aprender alternativas valiosas para un problema en particular. También te propongo un reto: intenta determinar la complejidad temporal y espacial de esta solución.
Recuerda, el aprendizaje es un proceso continuo, y cada enfoque nos brinda una oportunidad única para desarrollar nuestra habilidad para resolver problemas. ¡Así que sigue explorando, comentando, y nos vemos en la próxima clase para explorar más sobre la implementación de este algoritmo!
Aportes 1
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?