package algoritmos;
import java.util.Collection;
import java.util.Iterator;
import tablero.CasillaTablero.ColorLinea;
import tablero.CasillaTablero.TipoLinea;
import traza.TrazaAlgoritmo;
public class AlgoritmoAnchura extends AlgoritmoResolucion {
int indice=0;
int indiceActual=0;
public AlgoritmoAnchura(TrazaAlgoritmo traza,String cadenaHorizontal,String cadenaVertical){
this.traza=traza;
this.cadenaHorizontal=cadenaHorizontal;
this.cadenaVertical=cadenaVertical;
}
@Override
public void run() {
super.iniciarEstructurasDeDatos();
// TODO Auto-generated method stub
this.traza.iniciarAlgoritmo("Anchura");
Nodo nodoInicio=new Nodo();
nodoInicio.setFilaColumna(1, 1);
Nodo nodoObjetivo=new Nodo();
nodoObjetivo.setFilaColumna(this.cadenaVertical.length()+1, this.cadenaHorizontal.length()+1);
VariablesProblema variables=new VariablesProblema(nodoInicio,nodoObjetivo);
super.setVariablesProblema(variables);
this.indice=0;
this.indiceActual=0;
resolverAlgoritmo();
pintarSolucion();
}
public int funcionCoste(){
return this.indice+1;
}
@Override
public void insertarEnAbiertos(Nodo nuevoNodo, Nodo nodoActual) {
// TODO Auto-generated method stub
int coste=funcionCoste();
TipoLinea tipoLinea=seleccionarTipoLinea(nodoActual,nuevoNodo);
if(!this.abiertos.containsKey(nuevoNodo.getCoordenadas()) && !this.cerrados.containsKey(nuevoNodo.getCoordenadas())){
//Lo insertamos ya que su coste es infinito
nuevoNodo.setGn(coste);
//Pintamos la l�nea
this.traza.pintarLinea(nodoActual.getFila(),nodoActual.getColumna(),nuevoNodo.getFila(),nuevoNodo.getColumna(),tipoLinea,ColorLinea.ABIERTO);
this.abiertos.put(nuevoNodo.getCoordenadas(), nuevoNodo);
this.indice++;
}
else{
}
}
public Nodo siguienteNodo(){
Nodo nodoSeleccionado=null;
Collection<Nodo> c=this.abiertos.values();
Iterator<Nodo> itr=c.iterator();
while(itr.hasNext()){
Nodo n=itr.next();
if(n.getGn()==this.indiceActual){
nodoSeleccionado=n;
}
}
this.indiceActual++;
return nodoSeleccionado;
}
}