2 votos

Generación de paredes de laberinto de camino más largo

Tengo una cuadrícula 2D de celdas cuadradas adyacentes, con longitud de lado par (siempre existe una celda central)

Cada celda representa un campo de un laberinto o un enigma, que algún "peón" debe "visitar". El peón comienza en el centro y solo puede hacer movimientos horizontales y verticales. Calculo la cantidad mínima posible de esos movimientos. Obviamente, para cualquier laberinto vacío así, sería alguna trayectoria en "espiral" y la cantidad de movimientos sería igual al número de celdas menos uno.

Sin embargo, puedo dibujar "paredes" entre las celdas, prohibiendo movimientos horizontales o verticales, solo si cada celda seguirá siendo visitable. A veces eso puede obligar al peón a visitar algunas celdas dos veces, maximizando el recorrido mínimo.

¿Cómo dibujar paredes de tal manera que la cantidad de movimientos sea máxima? En otras palabras, ¿Cuál es la solución definitiva de paredes para hacer que el recorrido mínimo del peón sea de longitud máxima?

2voto

Misha Puntos 1723

Podemos asumir que dibujamos una colección máxima de paredes: si hay otra pared que podemos dibujar que aún dejará el laberinto conectado, entonces deberíamos dibujar esa pared, y eso solo puede aumentar la longitud del camino máximo.

En ese caso, el laberinto no contiene ciclos: el único tipo de camino que comienza en una ubicación XX y regresa a XX es un camino que repite cada paso que da.

En particular, un camino que comienza en el centro, visita cada ubicación, y vuelve al centro debe hacer cada movimiento posible dos veces. Si vamos de la ubicación XX a una ubicación adyacente YY, entonces entramos en un fragmento del laberinto del cual solo podemos salir regresando de YY a XX.

Si la cuadrícula es n×nn×n, hay n2n2 celdas, entonces hay n21n21 pares de celdas adyacentes sin pared entre ellas, y por lo tanto necesitamos 2n222n22 movimientos para hacer esto. Este número de movimientos siempre es posible: simplemente duplica cada borde y luego realiza un recorrido euleriano.

Si un camino comienza en el centro y visita cada ubicación, pero no regresa al centro, entonces podemos seguirlo con un camino desde la ubicación final hasta el centro, y el resultado debe tener una longitud de al menos 2n222n22. Entonces, el camino original debe tener una longitud de al menos 2n22d2n22d, donde dd es la distancia desde el centro hasta su ubicación final.

Además, siempre podemos encontrar un camino que comience en el centro, visite cada ubicación en 2n22d2n22d pasos y termine en una celda a dd pasos de distancia del centro. Simplemente toma un camino de longitud dd desde el centro hasta esa celda, y duplica cada borde que no esté en el camino. Luego, el grafo resultante tiene un camino euleriano desde el centro hasta esa celda de longitud 2n22d2n22d.

Siempre hay una celda que está al menos a n1n1 pasos de distancia del centro: una de las esquinas. (La distancia solo puede aumentar cuando agregamos paredes). Entonces, para que el camino mínimo sea lo más largo posible, asegúrate de que cada celda sea accesible en n1n1 pasos desde el centro; entonces no habrá ningún camino más corto que 2n2n12n2n1.

Hay muchas formas de hacer esto; aquí hay una que es fácil de generalizar.

paredes

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X