POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Código 101: Ratón en un Laberinto

Código 101 Ratón en un Laberinto: claves para resolverlo

Publicado el 27/08/2025

Code 101: Rat in a Maze

Descripción del problema

Se tiene una matriz cuadrada de orden N por N donde cada celda vale 1 o 0. El ratón comienza en la posición 0,0 y debe llegar a la posición N-1,N-1. El valor 1 indica que la celda es transitable y el valor 0 que está bloqueada. El ratón puede moverse en cuatro direcciones: U arriba, D abajo, L izquierda y R derecha. Se pide encontrar todas las rutas posibles desde el origen hasta el destino sin visitar ninguna celda más de una vez y devolverlas en orden lexicográfico.

Ejemplo 1

Entrada N = 4 m = {{1,0,0,0},{1,1,0,1},{1,1,0,0},{0,1,1,1}} Salida DDRDRR DRDDRR Explicación: Hay dos caminos válidos y ordenándolos lexicográficamente obtenemos DDRDRR DRDDRR

Ejemplo 2

Entrada N = 2 m = {{1,0},{1,0}} Salida No existe camino o la celda destino está bloqueada

Enfoque general

Este es un problema clásico de backtracking y recorrido en profundidad. Desde la celda inicial se exploran recursivamente las cuatro direcciones permitidas respetando las restricciones: no salir de los límites, no entrar en una celda bloqueada, y no visitar una celda ya visitada en la ruta actual. Cada vez que se alcanza la celda destino se registra la ruta construida. Para evitar repetir celdas se emplea una estructura de visitados o se marca la celda temporalmente como no transitables durante la exploración y se restaura al retroceder.

Puntos clave

1 Validar si la celda inicial es transitables 1 y si la celda destino es alcanzable en principio. 2 Usar backtracking con un array de visitados o marcadores temporales. 3 Generar las llamadas recursivas en el orden que permita obtener luego las rutas ya en un orden cercano al lexicográfico o bien ordenar la lista final de rutas. 4 Restaurar marcas al retroceder para permitir que otras rutas reutilicen las celdas.

Pseudocódigo y explicación paso a paso

Función principal findPath(arr,N) Crear lista ans vacía Si arr[0][0] != 1 devolver ans vacío Llamar a findPathHelper(arr,N,0,0,ans,cadena ruta vacía, matriz visitados inicializada a 0) Ordenar ans lexicográficamente Devolver ans

Función recursiva findPathHelper(arr,N,i,j,ans,path,visitados) Si i == N-1 y j == N-1 entonces añadir path a ans y retornar Si i fuera de límites o j fuera de límites o arr[i][j] == 0 o visitados[i][j] == 1 entonces retornar Marcar visitados[i][j] = 1 Llamar a findPathHelper con i+1,j y path + D Llamar a findPathHelper con i-1,j y path + U Llamar a findPathHelper con i,j+1 y path + R Llamar a findPathHelper con i,j-1 y path + L Marcar visitados[i][j] = 0 y retornar

Nota sobre la construcción de la cadena path En el pseudocódigo anterior se indican los movimientos como D U R L sin incluir comillas en la explicación. En una implementación real en Java se concatenarían caracteres o cadenas que representen esos movimientos.

Versión optimizada y alternativa de implementación

En lugar de mantener una matriz visitados separada se puede marcar temporalmente la propia matriz cambiando el valor 1 por -1 cuando se entra en una celda y restaurarlo a 1 al retroceder. Esta técnica reduce uso de memoria auxiliar y simplifica el código. También es importante, tras generar todas las rutas, ordenarlas lexicográficamente antes de devolverlas para cumplir la restricción del enunciado.

Ejemplo de fragmento estilo Java en pseudocódigo (símbolos < y > están escapados para que se vean correctamente) ArrayList<String> ans = new ArrayList<>() if arr[0][0] == 1 then call helper(arr,N,0,0,ans,'') helper pseudocódigo helper(arr,N,i,j,ans,path) if i < 0 or j < 0 or i >= N or j >= N or arr[i][j] == 0 or arr[i][j] == -1 return if i == N-1 and j == N-1 add path to ans and return arr[i][j] = -1 helper(arr,N,i+1,j,ans,path + D) helper(arr,N,i-1,j,ans,path + U) helper(arr,N,i,j+1,ans,path + R) helper(arr,N,i,j-1,ans,path + L) arr[i][j] = 1

Complejidad

En el peor de los casos, donde casi todas las celdas son transitables, el algoritmo explora muchas rutas posibles. La complejidad temporal es exponencial en N por la naturaleza del backtracking; más precisamente puede llegar a O(4^(N*N)) en términos del número de estados si no se elimina simetrías, aunque en la práctica las restricciones de límites y visitados reducen enormemente el espacio explorado. La complejidad espacial es O(N*N) por la matriz visitados y la pila de llamadas recursivas.

Buenas prácticas

1 Evitar reconstruir cadenas demasiado grandes en bucles inncesarios; usar StringBuilder si se desea optimización en Java. 2 Verificar condiciones de borde al inicio para evitar llamadas inútiles. 3 Ordenar la lista final de rutas antes de imprimirla para garantizar el orden lexicográfico. 4 Para instancias muy grandes valorar algoritmos alternativos o heurísticas si sólo se requiere una ruta y no todas.

Variantes y ampliaciones

1 Limitar movimientos a solo derecha y abajo: simplifica mucho el problema y permite DP. 2 Incluir costes por celda y buscar ruta mínima: pasa a ser un problema de caminos con pesos que se resuelve con Dijkstra o A estrella. 3 Permitir saltos o movimientos especiales: requiere adaptar la generación de vecinos.

Acerca de Q2BSTUDIO

Q2BSTUDIO es una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida. Ofrecemos soluciones completas que incluyen inteligencia artificial para empresas, agentes IA, ciberseguridad, servicios cloud AWS y Azure, e inteligencia de negocio con herramientas como Power BI. Nuestro equipo diseña aplicaciones empresariales personalizadas, integra modelos de IA para resolver problemas reales, y proporciona estrategias robustas de ciberseguridad para proteger datos y aplicaciones. Si necesitas software a medida, aplicaciones a medida, o servicios de inteligencia de negocio, contamos con experiencia para acompañarte desde el análisis hasta la puesta en producción.

Keywords para posicionamiento

aplicaciones a medida, software a medida, inteligencia artificial, ia para empresas, agentes IA, ciberseguridad, servicios cloud aws, servicios cloud azure, servicios inteligencia de negocio, power bi, soluciones IA, desarrollo a medida

Conclusión

El problema Rat in a Maze es un excelente ejercicio para practicar backtracking y profundizar en control de recorridos, marcadores de visitados y generación de soluciones completas. Para soluciones en producción en Q2BSTUDIO podemos adaptar este patrón a problemas reales de navegación, análisis de rutas, o incluso planificación en robots virtuales o físicos integrando capacidades de inteligencia artificial y servicios cloud para escalabilidad y monitorización.

#HappyCoding con Q2BSTUDIO: construimos software a medida, aplicaciones a medida e implementamos inteligencia artificial y ciberseguridad para llevar tus proyectos al siguiente nivel

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio