/*
Todos los elementos de la matriz están entre 1 y 3*N inclusive
Cada submatriz de 3x3 debe tener elementos sin repetir
Al sumar los elementos de cada submatriz de 3x3 se obtiene el mismo resultado
*/
#define N 6
#define SUBDIM 3
int valid(int m[][N], int fil, int col, int *firstSum){ //verifica que no repita, que esten entre uno y 3N y devuelve la suma
int suma = 0;
int vecAp[N*SUBDIM+1] = {0};
for(int i=fil; i < fil+SUBDIM; i++){
for(int j=col; j < col+SUBDIM; j++){
if(m[i][j] < 1 || m[i][j] > 3*N){
return 0;
}
if(vecAp[m[i][j]] == 1){
return 0;
}
vecAp[m[i][j]] = 1;
if(fil == 0 && col == 0){
(*firstSum) += m[i][j];
suma = *firstSum;
}
else{
suma += m[i][j];
}
}
}
if(suma != *firstSum){
return 0;
}
return 1;
}
int verifica(int m[][N]){
int firstSum = 0;
for(int i=0; i < N; i+=SUBDIM){ //selecciono fila del subcuadrado
for(int j=0; j < N; j+=SUBDIM){
if(!valid(m,i,j,&firstSum)){
return 0;
}
}
}
return 1;
}