Código 101: Ratón en un Laberinto

Backtracking para Rat in a Maze: obtiene todas las rutas de inicio a destino en una matriz N x N de 1s y 0s, sin celdas repetidas y en orden lexicográfico.

27 ago 2025 • 5 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

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

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat