/  4
 
Universidad Diego PortalesFacultad de Ingenier´ıaEscuela de Infrom´aticaCurso: Estructuras de DatosProfesor: Nelson BaloianAyudante: Jaime Guzm´an
Tarea 2
Fecha de Entrega:
A determinar.
La tarea es individual, para efecto se sancionar´a por copia dos trabajos ”parecidos”.
1 Problema
Problema: se tiene una matriz de caracteres de dimensiones MxN que representa un laberinto. En loselementos donde hay un caracter ’*’ significa que hay una pared y no se puede pasar por esa posicin ypor donde hay un espacio ’ ’ se puede pasar. Un ejemplo ser´ıa:
* * * * * * * * ** * * ** * * ** * * ** * * * * ** * ** * * ** * * * * * * * *
 
Se le pide escribir un etodo public static boolean salida(char[][] x, int i, int j, int M, int N) queretorne true si a desde la posici´on i,j se puede encontrar una salida.Recursivamente esto se puede programar de la siguiente manera, probando todos los caminos posi-bles:1. Si en la posicin donde estoy (i,j) hay un ’*’ no hay salida y retorno false.2. si estoy en una orilla (vertical u horizontal) y hay un entonces estoy fuera y retorno true.3. Si estoy en posicin (i,j) y hay un espacio, pruebo recursivamente si hay salida por alguna delas 4 vecinas (i+1,j), (i-1,j), (i,j+1), (i,j-1). Si alguna de las llamadas retorna true, yo retornotrue (suponemos que no se puede mover en diagonal). Si todas las llamadas retornan false,entonces retorno false.Esta soluci´on tiene el problema que puede generar llamadas infinitas. Por ejemplo, si llamamosa salida(x, a, b, M,N) y est´a vac´ıa pero no es salida, esta llamar´a a salida(x,a+1,b,M,N). Si lacelda (a+1,b) est´a vac´ıa y no es salida, llamar´a a salida(x, a+1-1,b,M,N), generandose as´ı un cicloinfinito. Para evitar esto podemos ir ”marcando” (por ejemplo, con una x) los lugares por dondehemos pasado para no pasar de nuevo por ah´ı:1
 
 
Se le pide escribir un etodo que retorne un string que contenga la secuencia de (i,j) por donde hayque pasar para llegar a la salida (cualquiera) o null si no hay salida. Para eso debemos modificarel encabezado:public static String sailda(char[][] x, int i, int j, int M, int N)Adem´as modificamos el algoritmo de la siguiente manera:1. En vez de retornar false retorno null.2. En vez de retornar true retorno un string de la forma ”(i,j)”, donde i y j son las coordenadasdel punto donde estoy.3. Si alguna de las llamadas retorna no null, entonces retorno el mismo string que recib´ı peroanteponiendo el substring ”(i,j)-¿”
 
Finalmente, queremos saber cu´anto mide el camino m´ınimo (de existir) entre la celda i,j y la salidaas pr´oxima. Para esto tenemos que probar todas las posibilidades y nos quedamos con la mejor(m´as corta). Para ello cambiamos el encabezado:public static int sailda(char[][] x, int i, int j, int M, int N)
 
Adem´as modificamos el algoritmo de la siguiente manera:1. En vez de retornar false (o null) retorno -1.2. Si estoy en la salida devuelvo 03. Hago las 4 llamadas recursivas, si todas retornan -1 entonces tambi´en retorno -1, si no, retornoel menor n´umero (distinto de -1) incrementado en 1.
2 Ejecuci´on del programa
El programa debe leer la configuraci´on del laberinto de un archivo de texto llamado ”laberinto.txt” encuya primera lnea vienen dos n´umeros enteros que representan el ancho y alto del laberinto. Luego vienenl´ıneas conteniendo los caracteres del laberinto.
2.1 Ejemplo
9 8********** * ** **** * **** *** ** * ** ************El programa debe interactivamente preguntar :Coordenadas i j ? 6 7 (6 7 ingresado por el usuario)(No)Existe salidaUn posible camino es : La salida mas prxima esta a X pasos (lasrespuestas que da depende de cuantas variantes hayan programado)Coordenadas i j ?Coordenadas i j? 0 0Fin
2
 
3 Consideraciones
1. Si usted desea programar en otro lenguaje que no se java ( C , C++) debera implemtar estaestructura y ejecucion para que realize la misma funcion.2. Para manipular el stream de entrada usted podra utilizar cualquier recurso de lenguaje de pro-gramacion usado para manipularlo con su programa, por ejemplo Scannner(), BufferedReader(),scanf(), etc.3. Para poder ejecutar el programa usted no debera realizar ningun tipo de interface grafica el pro-grama solo debera correr por linea de comando. En su defecto debera compilar y ejecutarse porconsola:En java , compilar javacEn C , compilar con gccEn C++, compilar con g++
4 Opciones del Programa
 
El programa debe compilar
 
El programa debera tener un archivo README, explicando su ejecucion y funcionamiento
 
El Programa debera correr mediante linea de comando
 
El Codigo Fuente del programa debera estar documentando y bien identado.
5 Restricciones
Su Tarea deber´a cumplir con los siguientes requerimientos
 
Debe usar C, C++ ´o Java para realizar
 
Los nombres de archivo que se leen y escriben deben indicarse de manera relativa al directorio enque se ejecuta el programa. Esto significa que no debe obligar a que los archivos se encuentren enuna direccion absoluta como C:
Mis
Documentos
MiTarea
, o /home/Yo/MiTarea.
 
Codigo fuente
DOCUMENTADO
 
En el inicio del codigo fuente a nivel de comentario debera colocar:
Nombre y apellido
RUT
Email
6 Recomendaciones
 
Dise˜ne su solucion antes de programar
 
Realice pruebas de su codigo a medida que va programando
 
Pruebe su entrega antes de enviar su trabajo3

Share & Embed

More from this user

Add a Comment

Characters: ...