<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: vivianamg2006-byte</title>
    <description>The latest articles on DEV Community by vivianamg2006-byte (@vivianamg2006byte).</description>
    <link>https://dev.to/vivianamg2006byte</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3895167%2F2860b8de-80fc-42d7-a3a1-e1dd80da234e.png</url>
      <title>DEV Community: vivianamg2006-byte</title>
      <link>https://dev.to/vivianamg2006byte</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vivianamg2006byte"/>
    <language>en</language>
    <item>
      <title>Proyecto Laberintos - Generar y Resolver | Estructuras de Datos</title>
      <dc:creator>vivianamg2006-byte</dc:creator>
      <pubDate>Sat, 25 Apr 2026 07:57:31 +0000</pubDate>
      <link>https://dev.to/vivianamg2006byte/proyecto-laberintos-generar-y-resolver-estructuras-de-datos-28i8</link>
      <guid>https://dev.to/vivianamg2006byte/proyecto-laberintos-generar-y-resolver-estructuras-de-datos-28i8</guid>
      <description>&lt;h2&gt;
  
  
  Datos del proyecto
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Curso:&lt;/strong&gt; Estructuras de Datos&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Período:&lt;/strong&gt; I Cuatrimestre 2026&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Estudiantes:&lt;/strong&gt; Nadia Gabriela Arauz Mayorga y Viviana Nicole Masís García&lt;br&gt;
&lt;strong&gt;Problema:&lt;/strong&gt; Laberintos (Generar y Resolver)&lt;/p&gt;




&lt;h2&gt;
  
  
  Descripción formal del problema
&lt;/h2&gt;

&lt;p&gt;El sistema desarrollado debe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generar automáticamente un laberinto de tamaño &lt;code&gt;n x m&lt;/code&gt; (mínimo 10×10) con paredes y caminos.&lt;/li&gt;
&lt;li&gt;Resolver el laberinto encontrando un camino desde una entrada hasta una salida.&lt;/li&gt;
&lt;li&gt;Comparar al menos dos algoritmos de resolución (BFS vs DFS).&lt;/li&gt;
&lt;li&gt;Analizar la complejidad temporal y espacial.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El laberinto se modela como una matriz de celdas donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;#&lt;/code&gt; = pared&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.&lt;/code&gt; = camino transitable&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;E&lt;/code&gt; = entrada&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;S&lt;/code&gt; = salida&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; = ruta solución (cuando se resuelve)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Modelado estructural (clases)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Clase&lt;/th&gt;
&lt;th&gt;Responsabilidad&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Nodo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Almacena una posición (fila, columna) y punteros siguiente/anterior para ser usado en Pila y Cola.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pila&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estructura lineal LIFO usada en la generación del laberinto (DFS carving) y en la resolución con DFS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cola&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estructura lineal FIFO usada en la resolución con BFS (camino más corto).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Laberinto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contiene la lógica principal: generar, resolver, mostrar, medir métricas.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;main&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Controla el menú interactivo y la entrada del usuario.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Estructuras de datos utilizadas y justificación
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Estructura&lt;/th&gt;
&lt;th&gt;Uso&lt;/th&gt;
&lt;th&gt;¿Por qué?&lt;/th&gt;
&lt;th&gt;Complejidad (acceso/operación)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Matriz 2D (&lt;code&gt;vector&amp;lt;vector&amp;lt;char&amp;gt;&amp;gt;&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Representa las celdas del laberinto&lt;/td&gt;
&lt;td&gt;Acceso directo por coordenadas en O(1), visualización sencilla&lt;/td&gt;
&lt;td&gt;O(1) lectura/escritura&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cola (implementación manual doblemente enlazada)&lt;/td&gt;
&lt;td&gt;BFS para encontrar la ruta más corta&lt;/td&gt;
&lt;td&gt;BFS requiere FIFO para explorar por niveles&lt;/td&gt;
&lt;td&gt;O(1) encolar/desencolar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pila (implementación manual doblemente enlazada)&lt;/td&gt;
&lt;td&gt;Generación del laberinto (DFS carving) y resolución DFS&lt;/td&gt;
&lt;td&gt;LIFO natural para backtracking en generación y exploración en profundidad&lt;/td&gt;
&lt;td&gt;O(1) push/pop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;vector&amp;lt;vector&amp;lt;Posicion&amp;gt;&amp;gt;&lt;/code&gt; (matriz de padres)&lt;/td&gt;
&lt;td&gt;Reconstrucción de la ruta después de BFS/DFS&lt;/td&gt;
&lt;td&gt;Guarda el nodo predecesor de cada celda → reconstrucción del camino al final&lt;/td&gt;
&lt;td&gt;O(1) acceso, reconstrucción O(longitud ruta)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Justificación adicional:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Matriz 2D&lt;/strong&gt;: opción natural para un laberinto basado en celdas. C++ con &lt;code&gt;vector&lt;/code&gt; permite redimensionamiento dinámico y copia sencilla.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cola y Pila manuales&lt;/strong&gt;: aunque existen &lt;code&gt;std::queue&lt;/code&gt; y &lt;code&gt;std::stack&lt;/code&gt;, implementarlas manualmente demuestra comprensión de estructuras lineales y permite control total sobre la memoria (punteros, sin realloc).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matriz de padres&lt;/strong&gt;: alternativa más eficiente que &lt;code&gt;std::map&lt;/code&gt; para las dimensiones usadas (acceso O(1) en lugar de O(log n)), aprovechando que las coordenadas son enteros pequeños.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Algoritmos implementados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Generación del laberinto (DFS recursive backtracking – “carving”)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Inicializar todas las celdas como pared &lt;code&gt;#&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Elegir una celda inicial en una posición impar (ej. 1,1) y marcarla como camino &lt;code&gt;.&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Usar una &lt;strong&gt;pila&lt;/strong&gt; para guardar la celda actual.&lt;/li&gt;
&lt;li&gt;Mientras la pila no esté vacía:

&lt;ul&gt;
&lt;li&gt;Obtener vecinos a dos pasos que sigan siendo pared.&lt;/li&gt;
&lt;li&gt;Si hay vecinos: elegir uno al azar, derribar la pared intermedia, marcar el vecino como camino y apilarlo.&lt;/li&gt;
&lt;li&gt;Si no hay vecinos: desapilar (retroceder).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Forzar bordes como paredes para cerrar el laberinto.&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Este método garantiza un laberinto perfecto (sin ciclos, con un único camino posible entre dos celdas).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Resolución con BFS (camino más corto)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Usa &lt;strong&gt;cola&lt;/strong&gt; (FIFO) para explorar nivel por nivel.&lt;/li&gt;
&lt;li&gt;Mantiene una matriz &lt;code&gt;visitado&lt;/code&gt; y una matriz &lt;code&gt;padre&lt;/code&gt; para reconstruir la ruta.&lt;/li&gt;
&lt;li&gt;Termina al encontrar la salida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ventaja:&lt;/strong&gt; siempre encuentra el camino con el menor número de pasos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Resolución con DFS (camino no óptimo)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Usa &lt;strong&gt;pila&lt;/strong&gt; (LIFO) para explorar en profundidad.&lt;/li&gt;
&lt;li&gt;Similar a BFS en estructuras auxiliares, pero el orden de exploración es diferente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desventaja:&lt;/strong&gt; no garantiza la ruta más corta (aunque en el caso de prueba coincidió).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Análisis de complejidad teórica (Big-O)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algoritmo&lt;/th&gt;
&lt;th&gt;Tiempo (peor caso)&lt;/th&gt;
&lt;th&gt;Espacio (peor caso)&lt;/th&gt;
&lt;th&gt;Explicación&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generación (DFS carving)&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;Cada celda se visita una vez. La pila puede llegar a guardar O(n×m) celdas en el peor caso.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BFS&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;Explora todas las celdas hasta encontrar la salida. La cola puede contener muchas celdas en la frontera.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DFS&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;O(filas × columnas)&lt;/td&gt;
&lt;td&gt;Similar a BFS; la pila también puede crecer hasta el número de celdas.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En la práctica, para laberintos de 15×15 (225 celdas), cualquiera de los algoritmos es instantáneo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Métricas experimentales (reales)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ejecución realizada:&lt;/strong&gt; Laberinto de &lt;strong&gt;15×15&lt;/strong&gt;, entrada en fila 1, salida en fila 13.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Semilla:&lt;/strong&gt; 42 (fija para reproducibilidad). Las métricas se obtuvieron directamente del programa.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algoritmo&lt;/th&gt;
&lt;th&gt;Celdas exploradas&lt;/th&gt;
&lt;th&gt;Longitud de ruta&lt;/th&gt;
&lt;th&gt;Tiempo (ms)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BFS&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;0.2914&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DFS&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;0.1541&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Discusión:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ambos algoritmos encontraron la misma longitud de ruta (20 pasos) en esta ejecución.
&lt;/li&gt;
&lt;li&gt;BFS exploró más del doble de celdas (51 vs 21) porque revisa sistemáticamente todos los niveles antes de encontrar la salida.
&lt;/li&gt;
&lt;li&gt;DFS fue más rápido (0.1541 ms frente a 0.2914 ms) porque exploró menos celdas y encontró una ruta válida rápidamente.
&lt;/li&gt;
&lt;li&gt;Teóricamente, BFS garantiza la ruta más corta; aquí DFS también la encontró por casualidad debido a la estructura del laberinto.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Análisis de resultados
&lt;/h2&gt;

&lt;p&gt;Con base en las métricas obtenidas para un laberinto de 15×15 con semilla 42, se observa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ruta óptima&lt;/strong&gt;: ambos algoritmos (BFS y DFS) encontraron la misma longitud de ruta (20 pasos). Esto significa que en este laberinto particular, DFS también halló la ruta más corta, aunque teóricamente no está garantizado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eficiencia en exploración&lt;/strong&gt;: BFS exploró 51 celdas, mientras que DFS solo 21. La diferencia se debe a que BFS explora por niveles y debe revisar todas las celdas a una distancia k antes de avanzar, mientras que DFS se "lanza" en profundidad y puede toparse con la salida más rápido si la rama elegida es la correcta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tiempo de ejecución&lt;/strong&gt;: DFS fue más rápido (0.1541 ms vs 0.2914 ms), coherente con la menor cantidad de celdas exploradas. La diferencia es pequeña (décimas de milisegundo) por el tamaño reducido del laberinto; en mapas más grandes (100×100 o más) la brecha sería más notoria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confiabilidad&lt;/strong&gt;: BFS es más confiable si se requiere la ruta más corta siempre. DFS puede ser útil cuando se prioriza la velocidad de respuesta y no importa que la ruta sea subóptima.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos resultados confirman las complejidades teóricas (O(n×m) para ambos) y muestran que, en la práctica, el comportamiento depende de la estructura del laberinto y de la posición de la entrada/salida.&lt;/p&gt;




&lt;h2&gt;
  
  
  Capturas de pantalla del proceso
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Paso 1 – Definir tamaño y generar laberinto con semilla 42:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr91lzjw3zlvnbibxnxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr91lzjw3zlvnbibxnxw.png" alt="Definir tamaño" width="548" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2 – Laberinto generado y menú:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzrfozul8squs8u0yt0m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzrfozul8squs8u0yt0m.png" alt="Menu" width="435" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 3 – Resolución con BFS (ruta marcada con *):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwt70a1ihdtlkkriyiyuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwt70a1ihdtlkkriyiyuz.png" alt="BFS" width="549" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 4 – Resolución con DFS:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2s8nk5zpfkhmb7uqy13i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2s8nk5zpfkhmb7uqy13i.png" alt="DFS" width="662" height="807"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 5 – Comparación de métricas:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu634wosinv0l5tqmjiz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu634wosinv0l5tqmjiz2.png" alt="Comparación" width="664" height="801"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparación de enfoques (BFS vs DFS)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterio&lt;/th&gt;
&lt;th&gt;BFS&lt;/th&gt;
&lt;th&gt;DFS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Camino más corto&lt;/td&gt;
&lt;td&gt;Sí garantiza&lt;/td&gt;
&lt;td&gt;No garantiza (pero a veces da igual)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memoria&lt;/td&gt;
&lt;td&gt;Cola (puede ser grande)&lt;/td&gt;
&lt;td&gt;Pila (generalmente menor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiempo en la práctica&lt;/td&gt;
&lt;td&gt;Similar o ligeramente mayor&lt;/td&gt;
&lt;td&gt;Ligeramente menor (en promedio)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementación&lt;/td&gt;
&lt;td&gt;Cola + visitados + padres&lt;/td&gt;
&lt;td&gt;Pila + visitados + padres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Útil cuando…&lt;/td&gt;
&lt;td&gt;Se necesita la ruta óptima&lt;/td&gt;
&lt;td&gt;Solo importa encontrar cualquier camino, o la memoria es limitada&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Conclusión de la comparación:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Implementamos ambos algoritmos. En nuestras pruebas, BFS exploró más celdas pero fue más confiable para encontrar la ruta óptima. DFS fue más rápido en tiempo y memoria, aunque en otros laberintos podría dar rutas más largas. Cada uno tiene su utilidad según el objetivo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Interfaz de usuario (consola)
&lt;/h2&gt;

&lt;p&gt;El programa presenta un menú interactivo con las siguientes opciones:&lt;/p&gt;

&lt;h2&gt;
  
  
    MENÚ DE LABERINTOS
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Definir tamaño del laberinto&lt;/li&gt;
&lt;li&gt;Generar laberinto&lt;/li&gt;
&lt;li&gt;Mostrar laberinto&lt;/li&gt;
&lt;li&gt;Resolver con BFS&lt;/li&gt;
&lt;li&gt;Resolver con DFS&lt;/li&gt;
&lt;li&gt;Comparar BFS vs DFS&lt;/li&gt;
&lt;li&gt;Reiniciar&lt;/li&gt;
&lt;li&gt;Salir&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opción 1:&lt;/strong&gt; Permite ingresar filas y columnas (mínimo 10×10, con validación).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 2:&lt;/strong&gt; Genera el laberinto usando DFS carving. Se puede ingresar una semilla para reproducibilidad (-1 = aleatorio).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 3:&lt;/strong&gt; Muestra el laberinto actual con la leyenda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 4:&lt;/strong&gt; Resuelve con BFS, muestra la ruta marcada con &lt;code&gt;*&lt;/code&gt; y las métricas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 5:&lt;/strong&gt; Resuelve con DFS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 6:&lt;/strong&gt; Ejecuta ambos y muestra una tabla comparativa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 7:&lt;/strong&gt; Reinicia el laberinto (pide nuevas dimensiones y genera uno nuevo automáticamente).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opción 8:&lt;/strong&gt; Sale del programa.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Validaciones implementadas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Validación&lt;/th&gt;
&lt;th&gt;Implementación&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dimensiones mínimas (10×10)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;definirTamanio()&lt;/code&gt; retorna &lt;code&gt;false&lt;/code&gt; si filas &amp;lt; 10 o columnas &amp;lt; 10, y el menú repite la pregunta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entrada y salida dentro del tablero&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;asignarEntradaSalida()&lt;/code&gt; busca celdas &lt;code&gt;'.'&lt;/code&gt; en la fila 1 (entrada) y fila &lt;code&gt;filas-2&lt;/code&gt; (salida).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entrada y salida transitables (no pared)&lt;/td&gt;
&lt;td&gt;Solo se eligen celdas donde &lt;code&gt;mapa[1][j] == '.'&lt;/code&gt; y &lt;code&gt;mapa[filas-2][j] == '.'&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laberinto sin solución&lt;/td&gt;
&lt;td&gt;Si BFS o DFS no encuentran camino, muestran &lt;code&gt;"No se encontró solución"&lt;/code&gt;. El usuario puede reiniciar o regenerar con otra semilla.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laberinto inválido (sin conexión)&lt;/td&gt;
&lt;td&gt;El algoritmo DFS carving produce un laberinto perfecto conectado. Si entrada y salida quedan en componentes distintos, se reporta y el usuario puede regenerar.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Además, se realiza validación de entrada del usuario (tamaños), control de estados visitados para evitar ciclos en BFS/DFS, y restauración del mapa original antes de cada resolución.&lt;/p&gt;




&lt;h2&gt;
  
  
  Uso de Inteligencia Artificial
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Herramienta utilizada:&lt;/strong&gt; DeepSeek (modelo de lenguaje)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objetivo del uso:&lt;/strong&gt; Comprensión conceptual y apoyo en la documentación.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompts empleados y respuestas:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;"Que es un dfs craving en c++? en español"&lt;br&gt;
Respuesta: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4d030dps8mai7jdwoe5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4d030dps8mai7jdwoe5.png" alt="Prompt 1" width="656" height="425"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"para que se usan los archivos .h?"&lt;br&gt;
Respuesta: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls1nyvo7wbekglzykz24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fls1nyvo7wbekglzykz24.png" alt="Prompt 2" width="651" height="481"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"En c++, recomiendas usar las librerias de stack y queu o es mejor hacer las clases por separado ?"&lt;br&gt;
Respuesta:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6113rs9if7wnh1j4s3vj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6113rs9if7wnh1j4s3vj.png" alt="Prompt 3" width="655" height="347"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Si implemento una semilla aleatoria después de dar dimensiones en un programa de laberintos, es posible que no me dé una solución?"&lt;br&gt;
Respuesta:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwqw7hdryu7qjvaquowj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwqw7hdryu7qjvaquowj.png" alt="Prompt 4" width="629" height="433"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Links de las conversaciones&lt;/strong&gt;&lt;br&gt;
Nadia: &lt;a href="https://chat.deepseek.com/share/bsay04pct5cnhmav6k" rel="noopener noreferrer"&gt;https://chat.deepseek.com/share/bsay04pct5cnhmav6k&lt;/a&gt;&lt;br&gt;
Viviana: &lt;a href="https://chat.deepseek.com/share/biigrbtsxjqilqmzz2" rel="noopener noreferrer"&gt;https://chat.deepseek.com/share/biigrbtsxjqilqmzz2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo ayudó en la investigación:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aclaró conceptos de backtracking y algoritmos de búsqueda en grafos.
&lt;/li&gt;
&lt;li&gt;Proporcionó ejemplos de pseudocódigo adaptables a C++.
&lt;/li&gt;
&lt;li&gt;Ayudó a organizar la comparación entre BFS y DFS de forma clara.
&lt;/li&gt;
&lt;li&gt;Explicó la importancia de la semilla y los casos sin solución.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Modificaciones realizadas:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adaptación completa a C++ con gestión manual de memoria (pilas y colas con &lt;code&gt;new&lt;/code&gt;/&lt;code&gt;delete&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Implementación propia de la matriz de padres (sin usar &lt;code&gt;std::map&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Diseño completo de la interfaz por consola y menú iterativo.
&lt;/li&gt;
&lt;li&gt;Inclusión de validación de tamaño mínimo y opción de reinicio completo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusiones técnicas
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generación con DFS carving&lt;/strong&gt; es eficiente (O(n×m)) y produce laberintos perfectos sin ciclos, ideales para el problema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BFS garantiza la ruta más corta&lt;/strong&gt; en número de pasos, aunque puede explorar más celdas y ser ligeramente más lento.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DFS es más rápido en memoria&lt;/strong&gt; y tiende a explorar menos celdas cuando encuentra una ruta pronto, pero no asegura optimalidad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;La combinación matriz + cola/pila + matriz de padres&lt;/strong&gt; es suficiente y eficiente para laberintos de hasta cientos de celdas, sin necesidad de estructuras más complejas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;El sistema cumple todos los puntos solicitados:&lt;/strong&gt; generación, resolución con ambos algoritmos, comparación, métricas, validaciones, reinicio, menú interactivo y uso explícito de estructuras lineales y no lineales.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>versionfinal</category>
    </item>
  </channel>
</rss>
