void cuadradoLatino(int n){ if (n==1){ m[0][0] = 1; }else{ assert(esPar(n)); cuadradoLatino(n/2); copiar(0,0,0,n/2, n/2, n/2); //desde_x, desde_y, hasta_x, hasta_y, dimension, incremento copiar(0,0,n/2,n/2, n/2, 0); copiar(0,0,n/2,0, , n/2); } }
/** * @brief función que resuelve el problema del cuadrado latino * @param tam * @param matriz */ void cuadradoLatino(int tam, int matriz[][TAM_LATINO]) { //Caso base, sería un cambio de 1-2 con 2-1 if (tam == 2) { matriz[1][0] = 1; matriz[0][0] = 2; } else { //Comprobamos si es potencia de 2 if (!potencia2(tam)) { //Podemos subdividir, llamada recursiva cuadradoLatino((tam / 2), matriz); //Al salir de la recursividad //Cuadrante Arriba derecha for (int i = 0; i < tam / 2; i++) { for (int j = (tam / 2) - 1; j < tam - 1; j++) { matriz[i][j] = (i + 1)+(j + 1); if (matriz[i][j] > tam) matriz[i][j] = matriz[i][j]-(tam / 2); } } mostrarCuadradoLatino(matriz); //Cuadrante Abajo izquierda for (int i = tam / 2; i < tam; i++) for (int j = 0; j < tam / 2; j++) matriz[i][j] = matriz[i - tam / 2][j] +(tam / 2); mostrarCuadradoLatino(matriz); //Cuadrante Abajo derecho for (int i = tam / 2; i < tam; i++) { for (int j = (tam / 2) - 1; j < tam - 1; j++) { matriz[i][j] = (i + 1) - (j + 1); if (matriz[i][j] <= 0) matriz[i][j] = matriz[i][j] + (tam / 2); } } mostrarCuadradoLatino(matriz); }else{ cout<< "No se ha contemplado el caso de que no sea potencia de 2"<<endl; return; } } mostrarCuadradoLatino(matriz); }