You are on page 1of 4

Ejemplo: Solucin de un Laberinto

Descripcin

Se presenta un programa que resuelve laberintos en forma recursiva. El laberinto a resolver se representa mediante una matriz de nmeros enteros, y su configuracin est dada por la inicializacin que se haga a dicha matriz. Por esto, para cambiar el laberinto ser necesario cambiar el cdigo del programa. Una vez que se haya introducido el concepto de archivo ser posible ampliar este programa para que sea ms til, almacenando distintas configuraciones de laberinto en distintos archivos.

Diseo

A continuacin se aplicar nuestra metodologa para la solucin de problemas para disear el programa mencionado. 1. Definicin del problema Conceptualizacin: El problema se ubica en un contexto en el que se debe buscar una solucin a un laberinto con una entrada y una salida, y con movimientos vlidos en cuatro direcciones (no diagonales). En el caso de este ejemplo, el contexto est limitado a una aplicacin de computador, en la que el laberinto est representado mediante una matriz de nmeros enteros. Objetivo: Partiendo de la entrada del laberinto, sealar una ruta que nos gue hasta la salida. Por ejemplo, dado el siguiente laberinto:

Una solucin que nos permitira alcanzar nuestro objetivo sera la ruta mostrada con asteriscos en la siguiente figura:

Descripcin general de la solucin: El problema se resolver haciendo uso de la recursividad. La solucin se basa en una tarea o funcin que se llamar recursivamente para intentar solucionar el laberinto a partir de una posicin particular. Desde cualquier lugar dentro del laberinto se intentar resolverlo primero intentando hacia izquierda, luego a la derecha, luego arriba y finalmente abajo. Para hacer estos intentos se emplear la funcin recursiva. El procedimiento parte de la posicin de entrada. Se utilizarn marcas que sern dejadas en el camino para no intentar por caminos por los que ya se pas y, en particular, no volver atrs salvo si se determina que no hay solucin por el camino que se sigue hasta ahora. Elementos involucrados: No existen elementos externos involucrados en la bsqueda de la solucin. El nico elemento activo es el computador en s llevando a cabo su trabajo. En el problema participan tambin los siguientes elementos pasivos: la matriz que representa el laberinto la ubicacin de la entrada la ubicacin de la salida

2. Conceptualizacin de la solucin Variables: Como se mencion, el laberinto estar representado mediante una matriz de nmeros enteros: lab. Adems, la posicin de la entrada en el laberinto estar dada por las coordenadas dentro de la matriz, representadas por las variables x0, y0, para la fila y la columna, respectivamente. De manera

similar, la posicin de la salida del laberinto se guardar en xf, yf Todas estas variables sern globales. Cada posicin de la matriz puede estar en uno de tres estados:

parte del muro (ladrillo) camino libre no visitado camino libre visitado

En el programa en C, la declaracin de las variables y constantes globales se har de la siguiente manera:


/* Constantes que definen la dimension del laberinto */ #define FILAS 13 #define COLUMNAS 21 /* Caracteres que se almacenan en las posiciones del laberinto: /* ASCII 219 es un cuadro relleno que se usa para las paredes /* ' ' es un espacio en blanco, para los caminos libres /* '*' es la marca que senala las posiciones visitadas (camino) #define L 219 #define E ' ' #define MARCA '*' /* Constantes logicas para valor de retorno de funciones */ #define TRUE 1 #define FALSE 0 /* Matriz global que representa el laberinto. En la inicializacion, */ /* L representa un ladrillo en la pared y E un espacio en blanco */ int lab[FILAS][COLUMNAS] = { { L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L }, { E, E, E, L, E, L, E, L, E, L, E, E, E, L, E, E, E, E, E, E, L }, { L, L, E, L, E, E, E, L, E, E, E, L, E, L, E, L, E, E, L, E, L }, { L, E, E, E, E, L, E, L, L, L, E, L, E, L, E, L, L, E, L, E, L }, { L, E, L, L, L, L, E, L, E, L, E, L, E, L, L, L, E, E, L, E, L }, { L, E, E, E, L, E, E, L, E, L, E, L, E, E, E, E, E, L, L, E, L }, { L, E, L, L, L, L, L, L, E, L, E, L, L, E, L, E, E, E, E, E, L }, { L, E, E, E, E, E, E, E, E, E, E, E, L, E, L, E, L, L, E, L, L }, { L, L, L, L, L, L, L, L, L, L, L, E, L, E, L, E, E, L, E, L, L }, { L, E, E, E, E, E, E, E, L, E, E, E, L, L, L, L, L, L, E, L, L }, { L, E, L, L, L, L, L, E, E, E, L, L, L, E, L, E, E, E, E, E, L }, { L, E, E, L, E, E, E, E, L, E, E, L, E, E, E, E, L, L, L, E, E }, { L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L } }; */ */ */ */

La inicializacin de la matriz que aqu se muestra corresponde al laberinto presentado en la figura del inicio. Los caminos estn formados de espacios libres (E's). Observe el contorno del laberinto, formado por L's, y los puntos de entrada y salida. En la implementacin de las distintas subtareas se hace uso de otras variables locales, propias de la funcin de cada subtarea. Descomposicin en Tareas: El problema global puede descomponerse en las siguientes tareas. Como las variables ms importantes se manejan en forma global, no es necesario pasarlas como parmetros. Este es el caso de la variable lab, la matriz que representa el laberinto. Cada una de las tareas aqu definidas se implementar como una funcin en el programa en C. Para una mejor comprensin, se incluye el cdigo en C que corresponde a cada una de estas funciones.

You might also like