/*
Realizado por Francisco Gallucci */
import java.awt.Color;
class Laberinto {
private Casilla[][] lab,solucion;
private int n,pix,piy,pfx,pfy,id_Solucion,max;
Laberinto(Casilla[][] lab2, int x)
{
this.n=x;
max=n*n;
lab=new Casilla[x][x];
solucion=new Casilla[max][max];
lab=lab2;
id_Solucion=0;
pix=piy=pfx=pfy=0;
}
public int getCaminoMasCorto()
{
int[] cantidad=new int[id_Solucion];
for(int i=0; i < id_Solucion ; i++)
{
cantidad[i]=0;
for(int j=0; solucion[i][j]!=null ;j++)
cantidad[i]++;
}
int menor=0;
for(int j=0; j < id_Solucion;j++)
if( cantidad[j] < cantidad[menor])
menor=j;
return menor;
}
boolean solucionar(Casilla posicion, Casilla fin, int fila, int columna,int y_Sol)
{
if(posicion==fin)
{
lab[fila][columna].setRecorrida(false);
id_Solucion++;
return true;
}
lab[fila][columna].setRecorrida(true);
boolean encontrado=false;
//abajo
if(fila+1 < n && id_Solucion < max)
{
if(!lab[fila+1][columna].getRecorrida() && lab[fila+1][columna].getTipo()!='#')
{
solucion[id_Solucion][y_Sol]=lab[fila][columna];
encontrado=solucionar(lab[fila+1][columna],fin,fila+1,columna,y_Sol+1);
if(encontrado)
{
if(id_Solucion < max-1)
{
int i=0;
while(solucion[id_Solucion-1][i] != null )
{
solucion[id_Solucion][i]=solucion[id_Solucion-1][i];
i++;
}
}
encontrado=false;
}
else
{
solucion[id_Solucion][y_Sol+1]=null;
lab[fila+1][columna].setRecorrida(false);
}
}
}
//derecha
if(columna+1 < n && id_Solucion < max)
{
if(!lab[fila][columna+1].getRecorrida() && lab[fila][columna+1].getTipo()!='#')
{
solucion[id_Solucion][y_Sol]=lab[fila][columna];
encontrado=solucionar(lab[fila][columna+1],fin,fila,columna+1,y_Sol+1);
if(encontrado)
{
if(id_Solucion < max-1)
{
int i=0;
while(solucion[id_Solucion-1][i] != null )
{
solucion[id_Solucion][i]=solucion[id_Solucion-1][i];
i++;
}
}
encontrado=false;
}
else
{
solucion[id_Solucion][y_Sol+1]=null;
lab[fila][columna+1].setRecorrida(false);
}
}
}
//arriba
if(fila-1 > 0 && id_Solucion < max)
{
if(!lab[fila-1][columna].getRecorrida() && lab[fila-1][columna].getTipo()!='#')
{
solucion[id_Solucion][y_Sol]=lab[fila][columna];
encontrado=solucionar(lab[fila-1][columna],fin,fila-1,columna,y_Sol+1);
if(encontrado)
{
if(id_Solucion < max-1)
{
int i=0;
while(solucion[id_Solucion-1][i] != null )
{
solucion[id_Solucion][i]=solucion[id_Solucion-1][i];
i++;
}
}
encontrado=false;
}
else
{
solucion[id_Solucion][y_Sol+1]=null;
lab[fila-1][columna].setRecorrida(false);
}
}
}
//izquierda
if(columna-1 > 0 && id_Solucion < max)
{
if(!lab[fila][columna-1].getRecorrida() && lab[fila][columna-1].getTipo()!='#')
{
solucion[id_Solucion][y_Sol]=lab[fila][columna];
encontrado=solucionar(lab[fila][columna-1],fin,fila,columna-1,y_Sol+1);
if(encontrado)
{
if(id_Solucion < max-1)
{
int i=0;
while(solucion[id_Solucion-1][i] != null )
{
solucion[id_Solucion][i]=solucion[id_Solucion-1][i];
i++;
}
}
encontrado=false;
}
else
{
solucion[id_Solucion][y_Sol+1]=null;
lab[fila][columna-1].setRecorrida(false);
}
}
}
lab[fila][columna].setRecorrida(false);
return false;
}
}