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
Viendo ahora - 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
Resolución de Problemas de Caballos de Ajedrez con BFS en Python
Resumen
¿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!