- 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
Resolución de Problemas de Caballos de Ajedrez con BFS en Python
Clase 25 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 efectiva para problemas complejos con BFS y Python?
No hay límites para quienes deciden enfrentar problemas complejos de programación. Cada línea de código nos acerca más al dominio absoluto de un lenguaje o una estructura lógica. Hoy te guiaré a través de un complejo problema resuelto de una manera eficiente, utilizando BFS (Breadth-First Search) en Python. ¡Sumérgete y explora cómo convertirte en un maestro de la lógica con estructuras de datos!
¿Cuál es la estructura básica del problema y su solución?
Primero, comprendamos lo que vamos a resolver. La esencia de nuestro problema es determinar la forma correcta de aplicar BFS utilizando una estructura de datos con Python. La función principal recibe cuatro parámetros: origenX, origenY, objetivoX y objetivoY, que representan las coordenadas de inicio y objetivo de nuestro caballero en un tablero de ajedrez.
- Direcciones del caballero: Creamos una lista llamada
direccionescon ocho pares de coordenadas posibles, cada par representa un posible salto del caballero. - Lista de casillas visitadas: Usamos un
hash setpara llevar un registro rápido y eficiente de las casillas visitadas, evitando muchas iteraciones. - Conteo de saltos: Definimos una variable para guardar los saltos realizados, aumentando su valor al llegar a cada nuevo nivel dentro del BFS.
- Cola de BFS: La cola es esencialmente una lista en Python donde inicializamos nuestra posición de origen (
origenX,origenY).
# Lista de direcciones posibles del caballero
direcciones = [(-1, 2), (1, 2), (-1, -2), (1, -2),
(-2, 1), (-2, -1), (2, 1), (2, -1)]
# Set para las posiciones ya visitadas
visitados = set()
# Conteo de saltos
cantidad_de_saltos = 0
# Cola con coordenadas de inicio
cola = [(origenX, origenY)]
¿Cómo gestionar los elementos dentro del BFS?
Cuando empleamos el BFS, uno de los aspectos más importantes es administrar correctamente los niveles y las casillas que revisamos, buscando siempre llegar a la posición objetivo.
- Condición de salida: Comprobamos si la posición actual coincide con la posición objetivo.
- Revisión de casillas: Para cada casilla posible desde la posición actual, verificamos si ya ha sido visitada. Si no, la añadimos a la cola.
- Aumento de nivel: Una vez exploradas todas las casillas de un nivel, incrementamos
cantidad_de_saltos.
while cola:
# Revisamos la casilla actual
actual_x, actual_y = cola.pop(0)
# Si llegamos a la posición objetivo
if actual_x == objetivoX and actual_y == objetivoY:
return cantidad_de_saltos
# Revisamos las direcciones posibles
for dx, dy in direcciones:
nuevo_x, nuevo_y = actual_x + dx, actual_y + dy
if (nuevo_x, nuevo_y) not in visitados:
visitados.add((nuevo_x, nuevo_y))
cola.append((nuevo_x, nuevo_y))
# Aumentar la cantidad de saltos después de pasar un nivel
cantidad_de_saltos += 1
¿Qué recomendaciones seguir para optimizar la resolución de problemas con BFS?
Para dominar el uso de BFS en problemas complejos:
- Entender bien el problema: Conocer bien cómo funciona el BFS y saber aplicarlo a tu problema específico es clave.
- Extiende soluciones: Intenta cambiar el problema básico. Por ejemplo, prueba resolverlo en otro lenguaje de programación o modifica las condiciones iniciales para un mejor entendimiento.
- Itera y prueba: Antes de correr pruebas formales, realiza pruebas de escritorio. Esto te permite detectar posibles errores antes de ejecutar el código.
- Colabora y comparte: Comparte tus experiencias y soluciones con otros para obtener feedback valioso que mejore tus habilidades.
Con estas guías, optimizarás tus soluciones, y mejorarás los tiempos de ejecución. No olvides que siempre puedes mejorar y adaptarte a cualquier desafío. ¡Sigue adelante y fortifica tus habilidades de programación!