Enlaces relacionados:


Software utilitzado Generación de laberintos

    4.1 Métodos posibles de resolución

    Existen dos métodos para resolver laberintos dependiendo si nos los miramos como una unidad o bien como un conjunto de unidades. En el primero de ellos, empezamos en un punto determinado y debemos llegar al siguiente para llegar hasta el final; en el otro método lo que se hace es mirar todo el laberinto e invalidar pasadizos; de esta manera, solo quedará la solución.

laber_4.gif (48664 bytes)    Los algoritmos de resolución de laberintos pueden ser clasificados según los siguientes criterios: la velocidad que necesita el algoritmo para encontrar la solución, que es siempre proporcional al tamaño del laberinto y/o a las condiciones del ordenador; la memoria externa y/o de pila que programa necesita para su ejecución; también debemos añadir otro criterio: la capacidad del hombre para aplicar aquel algoritmo en la resolución de un laberinto, ya sea mirando un mapa o una versión de tamaño real. A continuación presentamos unos cuantos con características diferenciadas.

  • Llenar los caminos sin salida: es un algoritmo simple, muy rápido y que no utiliza memoria extra. Solamente es necesario examinar el laberinto y llenar los caminos sin salida. Al final sólo quedará la solución, o las soluciones si hay más de una. Este algoritmo siempre buscará la única solución en los laberintos perfectos pero no hará gran cosa en un laberinto-trenza laberinto-trenza y, evidentemente, será totalmente ineficaz en un laberinto que no tenga caminos sin salida.

  • Recorrer la pared: es otro método de resolución de laberintos simple, muy rápido y no necesita memoria suplementaria. Comienza recorriendo el camino y, cada vez que hay un cruce, gira a la derecha (o a la izquierda). Si se quiere, se pueden marcar los sitios por donde se ha pasado y los que se han visitado dos veces de manera que al final se pueda resolver el laberinto pasando por los caminos utilizados una sola vez. Este método no encontrará el camino más corto y no funcionará mejor en los laberintos que tengan el final al centro y un circuito cerrado a su alrededor.

  • Rehacer caminos: : es un método rápido para todo tipo de laberintos, utiliza memoria en función de las dimensiones del laberinto y la solución que encuentra no es necesariamente la más corta. La idea es intentar moverse en cuatro direcciones; se traza una línea cuando se prueba una nueva dirección, se borra si lo que hay es un camino sin salida y, finalmente, obtenemos una solución simple. Este algoritmo encontrará siempre una solución, pero no necesariamente la más eficaz.

  • Eliminar colisiones: este método buscará las soluciones más cortas. Es rápido para todo tipo de laberintos y requiere como mínimo una copia de éste en la memoria. Básicamente inunda el laberinto con "agua" de manera que todas las distancias desde el inicio se llenan al mismo tiempo y cada vez que dos "columnas" de agua unen dos caminos por sus respectivos finales (indicando una vuelta), se añade una pared al original. Cuando todas las partes del laberinto están llenadas, debemos repetir el proceso hasta que no haya más colisiones.

  • Azar: en contraposición a los otros métodos, aquí encontramos un algoritmo de resolución de laberintos que se basa en moverse al azar. Esto significa desplazarse en una dirección y seguir el pasadizo hasta la siguiente unión; no debemos hacer ningún giro de 180 grados hasta que no sea necesario. Podríamos decir que este programa simula un humano sin memoria (no recuerda por donde ha pasado), por lo que es lento y no garantiza la llegada al final. Encontrada la solución del laberinto, será casi imposible rehacer los pasos; no obstante, es muy simple y no requiere memoria extra.

  •      4.2 Métodos utilizados para resolver laberintos

        Los algoritmos que presentamos a continuación y otros que explicaremos en el apartado de generación de laberintos han sido creados previamente de manera individual y más adelante los hemos reunido para crear el archivo algoritm.pas.

  •      Resolver laberintos creados añadiendo pared a un escenario vacío
  •     Este algoritmo es muy sencillo; consiste en llenar todos los espacios de un determinado laberinto de este tipo. Lo que hace es fijar unas coordenadas al azar x e y, y a partir de estos, poner una señal por dónde ha pasado. Una vez puesta la señal, se aplica el mismo procedimiento por la misma coordenada x,y por la coordenada y+1, después por la y-1, x-1, x+1... Así sucesivamente hasta que ha pasado por todas las casillas que hay y ha llenado (y recorrido) absolutamente todo el laberinto. Es un método recursivo en el cual el procedimiento omple se va llamando a sí mismo.

  • Resolver laberintos creados perforando un bloque de pared

  •     Para resolver laberintos de este tipo el algoritmo que utilizamos es el mismo ya que en los dos casos, resuelve el laberinto. La única modificación que hemos aplicado al programa es que en el momento en el que vea el objeto llave, da como terminada la resolución. No obstante, al principio había la condición de que si se veía la llave se detuviera después de haber preguntado si en la coordenada en la que se encontraba había tierra; de esta manera el procedimiento llena no acababa nunca y la pila se iba cargando hasta que se llenaba por completo. Es por esta razón que nos dimos cuenta de que esta condición tenía que estar antes de preguntar si havia tierra y, efectivamente, funcionó.

    Para descargarte el programa de generación y resolución de laberintos pulsa aquí

    Software utilitzado                                         Generación de laberintos

     



    Enlaces relacionados: