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