コード例 #1
0
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);
	}
}
コード例 #2
0
ファイル: utils.cpp プロジェクト: DavidFP/DisAlgoritmos
/**
 * @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);
}