4.- Confeccione una función recursiva que llene un tablero n-goro. Un tablero n-goro es una matriz de n x n+1 que se llena consecutivamente en diagonal y cada vez que se desborda la continuidad se sigue por la fila o columna desocupada contigua según corresponda:
1
|
17
|
13
|
9
|
5
|
6
|
2
|
18
|
14
|
10
|
11
|
7
|
3
|
19
|
15
|
16
|
12
|
8
|
4
|
20
|
Empezamos inmediatamente a llenar la matriz empezando por la primera posición y continuamos por la diagonal (posiciones 0,0 1,1 2,2 3,3 ... etc).
Borde: Si i=n y j=n+1, quiere decir que llegamos a la última posición de la matriz y podemos imprimir.
Si no es así, debemos revisar si la i (filas) excedió la última posición y debemos mantener el número que queríamos colocar y la posición de la columna pero cambiar la fila por la 0 (empezar de arriba de nuevo).
También debemos validar que la j no exceda n+1, lo que significará que se habrá pasado de la última columna y en ese caso, mantenemos la fila y el número para cambiar la j por 0 (primera columna).
La implementación en Java es la siguiente:
public void nGoro(int i, int j, int paso){
/*************************************
* Si se mantiene dentro del tablero,*
* llenar la posición con el valor *
* en la recursión y continuar por la*
* posición en diagonal. *
*************************************/
if( estaDentro(i,j) ){
T[i][j] = paso;
nGoro(i+1, j+1, paso + 1);
}
/****************************************
* BORDE: *
* Si se ha llegado a la última posición*
* se imprime y no hace nada más *
****************************************/
else if( (i==N) && (j==N+1))
imprimir( );
/****************************************
* Si se ha pasado de la última fila *
* conservar número y columna y recurrir*
* por la primera fila *
****************************************/
else if ( i == N )
nGoro(0, j, paso);
/****************************************
* Si se excede la última columna se *
* conserva el número y la fila y se *
* recurre por la primera columna. *
****************************************/
else if ( j == N+1 )
nGoro(i, 0, paso);
}
No hay comentarios:
Publicar un comentario