- 1

Grafos y Árboles: Estructuras de Datos Avanzadas
06:48 - 2

Estructuras de Datos: Introducción a Árboles y Sus Propiedades
07:12 - 3

Recursión: Concepto y Aplicaciones Prácticas con Ejemplos
09:11 - 4

Aplicaciones Prácticas de Grafos en Tecnología e Industria
05:16 - 5
Representación de Grafos: Matriz y Lista de Adyacencia
01:02
Búsqueda del camino más corto entre islas usando BFS en Python
Clase 33 de 52 • Curso de Algoritmos Avanzados: Grafos y Árboles
Contenido del curso
- 6

Búsqueda en Profundidad (DFS) en Árboles y Grafos
04:50 - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 - 8
Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 - 9

Recorridos y Profundidad en Árboles Binarios y Enearios
07:09 - 10

Suma de Caminos en Árboles Binarios
02:05 - 11

Suma de Números de Raíz a Hoja en Árboles
07:32 - 12
Playground: Sum Root to Leaf Numbers
00:00 - 13

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

Resolución del Problema de Número de Islas con DFS
02:32 - 15

Conteo de Islas en Matrices con DFS
08:51 - 16
Playground: Number of Islands
00:00 - 17

Implementación de "Número de Islas" con Recursión en Python
10:18 - 18
Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 - 19
Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19
- 20

Algoritmo BFS: Recorrido en Anchura de Grafos y Árboles
02:05 - 21

Implementación de BFS en Árboles usando Python
08:43 - 22

Movimiento mínimo de caballo en ajedrez infinito
02:55 - 23

Resolviendo el Problema Mínimo de Movimiento del Caballo en Ajedrez
08:11 - 24
Playground: Minimum Knights Moves
00:00 - 25

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

Propagación de Plagas en Cultivos: Cálculo de Días para Contagio Total
03:50 - 27

Resolución de Rotting Oranges usando BFS
08:44 - 28
Playground: Rotting Oranges
00:00 - 29

Propagación de Plagas en Matrices usando BFS en Java
23:44 - 30

Construcción de Puentes Cortos entre Islas en Matrices Binarias
03:39 - 31

Resolución del Problema Shortest Bridge con DFS y BFS
07:36 - 32
Playground: Shortest Bridge Between Islands
00:00 - 33

Búsqueda del camino más corto entre islas usando BFS en Python
14:58 - 34
Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 - 35
Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47
- 36

Algoritmo Backtracking: Solución de Problemas Complejos
04:21 - 37

Combinaciones de Letras en Números Telefónicos
01:52 - 38

Combinaciones de Letras a partir de un Número de Teléfono
09:20 - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 - 40
Playground: Letter Combinations of a Phone Number
00:00 - 41

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

Generación de IPs válidas con backtracking en C++
28:17 - 43
Playground: Restore IP Addresses
00:00 - 44

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

Búsqueda de Palabras en Matrices usando Backtracking y DFS
08:31 - 46
Playgrund: Word Search
00:00 - 47

Implementación de búsqueda de palabras en matrices con DFS en JavaScript
18:19 - 48
Resolución del problema de las n reinas en ajedrez
01:08 - 49
Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 - 50
Combinaciones y Permutaciones con Backtracking
02:14
¿Cómo implementar una solución al problema de las islas utilizando Python?
En este fascinante recorrido por las soluciones algorítmicas, exploramos cómo abordar el problema de encontrar la cantidad mínima de pasos necesarios para conectar dos islas en un mapa utilizando Python. La clave radica en comprender el uso de algoritmos DFS (Depth-First Search) y BFS (Breadth-First Search), técnicas fundamentales en la programación y el análisis de grafos.
¿Qué cambios son necesarios en la función inicial?
Para desarrollar la solución elegimos Python, pero antes de implementar el enfoque queremos asegurarnos de tener un punto de partida claro y adaptado a nuestro objetivo. Inicialmente, comenzamos con un código que resolvía el problema de contar la cantidad de islas. Vamos a modificarlo para enfocarnos en hallar la mínima cantidad de pasos que conecten las islas.
- Renombrar la función: Cambiamos el nombre de la función a
shortest_reachy se define para recibir solamente un mapa. - Eliminar variables innecesarias: Eliminamos la variable que contaba la cantidad de islas y otras que ya no aportan al nuevo objetivo.
- Definir el retorno: Debemos retornar un entero que indique la mínima cantidad de pasos necesarios. Si no es posible conectar las islas, retornamos -1.
¿Cómo detectar cuándo se encuentra la segunda isla?
Para optimizar el proceso de búsqueda:
-
Crear una bandera boolean: Esta bandera, llamada
encontré_isla, nos ayudará a detectar cuando alcanzamos la segunda isla. Esto nos permite dejar de buscar una vez que cumplimos el objetivo.encontré_isla = False -
Iterar por el mapa: Utilizamos ciclos que recorren el mapa, y aplicamos DFS cuando encontramos tierra. Sin embargo, antes de aplicar DFS, si ya encontramos la segunda isla, podemos salir del ciclo.
¿Cómo utilizar BFS para conectar las islas?
El uso de BFS es crucial en este problema, dado que este algoritmo examina las capas o niveles que rodean una isla hasta encontrar la siguiente:
-
Inicializar variables: Definimos
cantidad_materialpara cuantificar el recurso necesario para crear el puente y lo iniciamos en cero. -
Implementar la cola: En BFS utilizamos una cola (FIFO) para gestionar los puntos a explorar:
cola = [(inicio_x, inicio_y)] -
Verificar condiciones: A medida que expandimos la búsqueda, si encontramos la otra isla, retornamos la cantidad de pasos necesarios. En lo contrario, seguimos explorando nuevos niveles.
¿Cómo implementar el código de manera efectiva?
Vamos a ver partes esenciales del código y cómo se ejecutan estos conceptos:
# Marcamos las posibles direcciones para moverse
direcciones = [(0, 1), (0, -1), (1, 0), (-1, 0)]
# Implementamos la lógica de iteración y búsqueda
while cola:
for _ in range(len(cola)):
actual_x, actual_y = cola.pop(0)
if mapa[actual_x][actual_y] == 1:
return cantidad_material
for dx, dy in direcciones:
nueva_x, nueva_y = actual_x + dx, actual_y + dy
# Lógica para verificar si nueva posición es válida...
¿Qué pasa si no encontramos una solución?
Nuestro enfoque asegura que, si ninguno de los caminos posibles nos lleva a conectar las dos islas, el proceso retornará un valor de -1, indicando la imposibilidad de conexión con los datos dados.
Este enfoque te ofrece la oportunidad de profundizar en métodos de búsqueda y grafos. La programación competitiva involucra resolver problemas como estos con eficiencia, y esperamos que esta guía te haya sido útil para encarar desafíos similares. ¡Sigue aprendiendo y desarrollando tu habilidad en algoritmos y estructuras de datos!