Estructuras de datos · Sección 12

DFS, BFS y proyecto final

Recorridos en profundidad y amplitud, componentes conexas en grafos no dirigidos, caminos mínimos sin peso y una biblioteca Java comprobada mediante invariantes, pruebas y mediciones.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Necesitas las representaciones de grafos de la sección 11 y los contratos de pila y cola de las secciones 5 y 6.

02 / META OBSERVABLE

Al terminar deberías poder relacionar DFS con BFS y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.

04 / PREPARA EL LABORATORIO

Instala un JDK actual y utiliza un editor o IDE con soporte para Java. Trabaja en un proyecto de laboratorio separado.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan DFS y BFS? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Cerrarás la ruta usando las estructuras anteriores para recorrer redes y entregar una biblioteca Java que pueda comprobarse y explicarse.

Al terminar podrás
  • DFS avanza por una rama y recuerda cómo regresar
  • BFS descubre por capas y obtiene distancias mínimas sin peso
  • El proyecto final combina contratos, pruebas y mediciones
01
Profundidad

DFS avanza por una rama y recuerda cómo regresar

DFS marca el vértice al descubrirlo y visita sus vecinos no marcados. Puede implementarse con recursión o una pila explícita; esta última evita agotar la pila de llamadas en grafos muy profundos. En un grafo no dirigido permite encontrar componentes conexas; en uno dirigido, la conectividad fuerte requiere un algoritmo específico.

01

Marca antes de explorar vecinos.

02

En un grafo no dirigido, inicia desde cada vértice no visitado para cubrir sus componentes.

03

Con listas de adyacencia, el recorrido completo cuesta O(V + E).

Comprueba lo aprendido · 01

¿Qué fallo evita el conjunto de visitados?

Mostrar respuesta +

Evita volver indefinidamente por ciclos y procesar muchas veces el mismo vértice.

02
Amplitud

BFS descubre por capas y obtiene distancias mínimas sin peso

BFS marca el origen, lo agrega a una cola y procesa sus vecinos. La primera vez que descubre un vértice obtiene la mínima cantidad de aristas desde el origen en un grafo sin pesos. Un mapa de predecesores permite reconstruir el camino; con listas de adyacencia, el recorrido cuesta O(V + E).

01

La cola conserva las capas.

02

Marca al encolar, no al retirar.

03

Con pesos distintos se necesita otro algoritmo.

Comprueba lo aprendido · 02

¿Por qué se marca al vecino cuando se encola?

Mostrar respuesta +

Para impedir que varios padres lo encolen repetidamente antes de que llegue su turno.

03
Entrega verificable

El proyecto final combina contratos, pruebas y mediciones

La biblioteca final incluye interfaces pequeñas, implementaciones encapsuladas y pruebas para vacío, un elemento, muchos, duplicados y errores. Cada estructura documenta invariantes y complejidad. La aplicación de rutas define un formato de archivo simple —por ejemplo, una arista origen,destino por línea—, valida cada registro y usa DFS y BFS sin depender de detalles internos.

01

Prueba propiedades además de ejemplos.

02

Compara tu resultado con java.util cuando exista equivalente.

03

Mide después de demostrar corrección.

Comprueba lo aprendido · 03

¿Qué evidencia demuestra que la implementación está lista?

Mostrar respuesta +

Contratos claros, invariantes preservados, pruebas normales y frontera, comparación con resultados conocidos y una medición reproducible de las operaciones clave.

Resumen de la sección

Tu recorrido en tres ideas

  1. DFS avanza por una rama y recuerda cómo regresar
  2. BFS descubre por capas y obtiene distancias mínimas sin peso
  3. El proyecto final combina contratos, pruebas y mediciones
PROFUNDIZACIÓN / LABORATORIO GUIADO

Entrega un explorador de rutas

Integra modelado, listas de adyacencia, pila, cola, visitados, predecesores, archivos y pruebas.

CASO

Una comunidad necesita cargar lugares y conexiones bidireccionales sin peso, identificar grupos aislados y encontrar rutas con menos tramos.

Procedimiento

  1. Define formato, validaciones y semántica del grafo no dirigido antes de cargar.
  2. Implementa componentes conexas con DFS y camino mínimo en aristas con BFS y predecesores.
  3. Prueba ciclos, aislamiento, origen igual a destino y ruta inexistente.

Evidencia mínima

  • Archivo de ejemplo y errores comprensibles.
  • Orden de visita y conjunto de componentes.
  • Camino reconstruido y comparación con casos conocidos.
Mostrar razonamiento modelo +

DFS recorre cada componente; BFS desde el origen asigna un predecesor al descubrir y reconstruye desde destino. La ausencia de camino es un resultado válido, no una excepción inesperada.

Para ir más lejos

¿Qué algoritmo necesitarías si cada conexión tuviera un tiempo distinto?

CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Marcar un vértice demasiado tarde y encolarlo muchas veces.

ERROR 02

Afirmar que BFS encuentra el camino de menor costo cuando hay pesos distintos.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Entrega una aplicación para un grafo no dirigido y sin pesos que cargue un archivo, muestre componentes conexas con DFS y reconstruya un camino mínimo en cantidad de aristas con BFS.

Mostrar pauta de corrección +
Una respuesta sólida:
  • Maneja grafos desconectados y ciclos.
  • Conserva predecesores para reconstruir.
  • Incluye pruebas, invariantes y mediciones reproducibles.