Dado un laberinto cuadrado, cada entrada en el laberinto es una celda abierta ‘O’ o una pared ‘X’. Una rata puede viajar a sus ubicaciones adyacentes (izquierda, derecha, arriba y abajo), pero para llegar a una celda, debe estar abierta. Dadas las ubicaciones de las ratas, ¿puedes averiguar si todas las ratas pueden alcanzar a las demás?

Gracias por A2A, este es un acertijo bastante interesante.
Y si no me equivoco, este es de codeVita 2014

Puedes hacerlo con fuerza bruta y un poco de ayuda con trucos.

Primero, entendamos nuestro escenario
‘O’ son celdas abiertas ‘X’ son paredes y digamos ‘A’ son ratas.

Tienes que usar el método de seguimiento.

Paso 1: – Comienza con cualquier rata al azar (o con la que encuentres primero)
Paso 2: – Mira a las celdas derecha, izquierda, superior e inferior de esta rata (esto creará 4 ramas diferentes)


Paso 3: tome todas estas 4 ramas 1 por 1 (supongo que conoce el método de seguimiento)
Paso 4: mientras tanto, realice un seguimiento de todos los nodos visitados en una matriz
Paso 5: – Cada vez que visites una nueva celda habrá 3 opciones
Paso 5.1: si la celda nueva tiene X, descarte toda la rama y muévase a la siguiente rama
Paso 5.2: – si la nueva celda tiene A marca a la rata como “alcanzada” (o meta alcanzada o lo que quieras)
Paso 5.3: – si la nueva celda tiene la marca O, continúe en la rama y llame a la misma función recursivamente para t
Él esta nueva posición.

Recuerde que cada vez que se mude a una nueva celda, asegúrese de que esta nueva celda no haya sido visitada antes.

Repita los pasos anteriores para todas las ratas. Consejo: – cada vez que una Rata llegue a otra Rata marca a ambas ratas como completadas.

Retroceder será un buen enfoque para esto.
Pruébalo, espero que puedas lograrlo.

Espero eso ayude.

Comienza desde la posición de cualquier rata y haz una búsqueda profunda en primer lugar. Mantenga y actualice una matriz booleana 2D de celdas visitadas para evitar volver a visitar las mismas celdas. Una vez que haya agotado su búsqueda, revise la lista de posiciones y verifique que para cada rata, se haya visitado su celda en la búsqueda. Si alguno no, entonces la respuesta es no, de lo contrario sí.

La solución tiene una complejidad de tiempo O (n ^ 2 + R) ya que la búsqueda visita cada celda como máximo una vez, y la verificación final procesa la posición de cada rata una vez. R = O (n ^ 2), entonces la solución es O (n ^ 2). La complejidad del espacio también es O (n ^ 2) ya que mantenemos una matriz 2D de celdas visitadas.

Trate las posiciones de las ratas como puntos de partida, realice una búsqueda de amplitud.

Esto es solo una aplicación de etiquetado gráfico.

More Interesting

¿Cuál es la diferencia entre: d-ary, k-ary, n-ary, m-ary?

¿Qué necesitas saber para aprender algoritmos? Probé los algoritmos gratuitos de Coursera y el curso de estructuras de datos de Princeton y me perdí por completo.

¿Qué es importante saber y estudiar para ser un excelente programador? ¿Es importante practicar programación competitiva?

¿Algún algoritmo de aprendizaje profundo quedará obsoleto algún día con los algoritmos tradicionales? ¿O los algoritmos de aprendizaje profundo solo son adecuados para problemas específicos?

¿Cuál es el mecanismo fundamental detrás de los generadores de números aleatorios?

¿Cómo funciona este algoritmo para encontrar los bordes del corte mínimo de un gráfico?

¿Puede un gráfico tener bordes dirigidos y no dirigidos?

¿Por qué hay diferentes tipos de clasificación en C?

¿Cuáles son algunas aplicaciones inteligentes de búsqueda binaria?

¿Cómo es posible que algún algoritmo sea más rápido que cualquier otro algoritmo similar para algunos valores de la variable de entrada y más lento para otros valores?

¿Qué algoritmo puedo usar para hacer que una imagen se vea más caricaturesca?

¿Existe un algoritmo de tiempo O (N) para esta pregunta?

¿Cómo obtenemos ideas para resolver preguntas de programación dinámica?

Cómo mantener una matriz, admitir inserción y asignación aleatorias, y consultar el kth elemento más grande en un intervalo dado

¿Cuál crees que es el algoritmo de optimización más inteligente?