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 m´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
Add a Comment