Está en la página 1de 3

/**

* Solucion de cuadrado magico de 3x3


*
* @author Luis Tapia
* @version (a version number or a date)
*/
public class Cuadrado3
{
private int[][] cuadro;
private int[] sumasH,sumasV,sumasD ;
private boolean hor,vert,diag[];
private boolean uso[];
private int x,k, hasta;
/**
* Constructor for objects of class Cuadrado3
*/
public Cuadrado3(int x){
this.x=x;
cuadro = new int[x][x];
sumasH = new int[x];
sumasV = new int[x];
sumasD = new int[2];
hor = true;
vert = true;
diag = new boolean[2];
hasta = x*x;
k = (hasta+1)*x/2;
uso = new boolean[hasta];
}
public void llenar(int lugar,int num){
//num = num%hasta;
if(lugar == cuadro.length*cuadro[0].length){
if(prueba())
{
//System.out.println("********************************");
imprimir(0,0);
}
/*else
imprimir(0,0);*/
}
else if(num<=hasta)
{ if(!uso[num-1]){
cuadro[lugar/x][lugar%x] = num;
uso[num-1]=true;
llenar(lugar+1,1);
cuadro[lugar/x][lugar%x] = 0;
uso[num-1]=false;
}

llenar(lugar,num+1);
}
}
public void imprimir(int i,int j){
if(i==0&&j==0)System.out.println("------------------");
if(i<cuadro.length){
if(j<cuadro[0].length){
System.out.print(cuadro[i][j]+"\t");
imprimir(i,j+1);
}
else{
System.out.println();
imprimir(i+1,0);
}

}
}

public boolean prueba(){

hor=vert=diag[0]=diag[1]=true;
pruebaHor(0,0);
pruebaVert(0,0);
pruebaDiag1(0);
pruebaDiag2(cuadro.length-1,0);
return hor && vert && diag[0] && diag[1];

}
public void pruebaHor(int i,int j){

if(i<cuadro.length-1){
if(j==0) sumasH[i]= 0;
if(j<cuadro[0].length){
sumasH[i]+=cuadro[i][j];
pruebaHor(i,j+1);
}
else{
hor = hor && sumasH[i]==k;
pruebaHor(i+1,0);
}
}
}
public void pruebaVert(int i,int j){
if(j<cuadro[0].length-1){
if(i==0) sumasV[j]=0;
if(i<cuadro.length){
sumasV[j]+=cuadro[i][j];
pruebaVert(i+1,j);
}
else{
vert = vert && sumasV[j]==k;
pruebaVert(0,j+1);
}

}
public void pruebaDiag1(int i){
if(i<cuadro.length&&i<cuadro[0].length){
if(i==0) sumasD[0] = 0;
sumasD[0]+=cuadro[i][i];
pruebaDiag1(i+1);
}
else{
diag[0]=sumasD[0]==k;
}
}
public void pruebaDiag2(int i,int j){
if(j<cuadro[0].length){
if(i==cuadro.length-1) sumasD[1]=0;
if(i>=0){
sumasD[1]+=cuadro[i][j];
pruebaDiag2(i-1,j+1);
}
}
else{
diag[1]=sumasD[1]==k;
}
}
public static void main(String args[]){
Cuadrado3 c =new Cuadrado3(3);
c.llenar(0,1);
}
}

También podría gustarte