You are on page 1of 2

public class Algoritmo_Dijkstra {

private final Arboles arbol;


private int subTope;
private Nodo auxi=null;
private int auxAumulado; // es un acumulado auxiliar
private int subAcomulado;
private final Nodo nodo[];
private final int tope;
private int permanente;
private final int nfinal;

public Algoritmo_Dijkstra (Arboles arboles, int tope,int permanente, int


nodoFin){
this.arbol = arboles;
this.tope = tope;
this.nodo= new Nodo[tope];
this.permanente = permanente;
this.nfinal = nodoFin;

public int getAcumulado(){


return nodo[nfinal].getAcumulado();
}

public void dijkstra(){


for (int i = 0; i < tope; i++) // creamos el vector nodo del tama�o de
tope el cual tiene el numero de nodo pintados
nodo[i]= new Nodo();

if(permanente != nfinal){
jPanel1.paint(jPanel1.getGraphics());
R_repaint(tope, arbol);
Pintar.clickSobreNodo(jPanel1.getGraphics(),
arbol.getCordeX(permanente), arbol.getCordeY(permanente), null,Color.GREEN); //
pinta de color GREEN los nodos

nodo[permanente].setVisitado(true);
nodo[permanente].setNombre(permanente);

do{
subAcomulado=0;
auxAumulado = Integer.MAX_VALUE; // lo igualamos a esta cifra ya q el
acomulado de los nodos, supuestamente nunca sera mayor
nodo[permanente].setEtiqueta(true);
for (int j = 0; j < tope; j++) {
if(arbol.getmAdyacencia(j, permanente)==1){
subAcomulado= nodo[permanente].getAcumulado()
+arbol.getmCoeficiente(j, permanente);
if(subAcomulado <= nodo[j].getAcumulado() &&
nodo[j].isVisitado()==true && nodo[j].isEtiqueta()== false){
nodo[j].setAcumulado(subAcomulado);
nodo[j].setVisitado(true);
nodo[j].setNombre(j);
nodo[j].setPredecesor(nodo[permanente]);
}
else if( nodo[j].isVisitado()==false){
nodo[j].setAcumulado(subAcomulado);
nodo[j].setVisitado(true);
nodo[j].setNombre(j);
nodo[j].setPredecesor(nodo[permanente]);
}
}
}
for (int i = 0; i <tope; i++) { // buscamos cual de los nodos
visitado tiene el acomulado menor par escogerlo como permanente
if(nodo[i].isVisitado()== true && nodo[i].isEtiqueta()== false){
if(nodo[i].getAcumulado()<=auxAumulado){
permanente= nodo[i].getNombre();
auxAumulado= nodo[i].getAcumulado();
}
}
}
subTope++;
}while(subTope<tope+1);
auxi= nodo[nfinal];
if(auxi.getPredecesor() == null )
JOptionPane.showMessageDialog(null,"No se Pudo LLegar Al Nodo
"+nfinal);
while(auxi.getPredecesor() != null){
Pintar.pintarCamino(jPanel1.getGraphics(),
arbol.getCordeX(auxi.getNombre()), arbol.getCordeY(auxi.getNombre()),
arbol.getCordeX(auxi.getPredecesor().getNombre()),
arbol.getCordeY(auxi.getPredecesor().getNombre()),Color.GREEN);
Pintar.clickSobreNodo(jPanel1.getGraphics(),
arbol.getCordeX(auxi.getNombre()), arbol.getCordeY(auxi.getNombre()),
null,Color.GREEN);
auxi=auxi.getPredecesor();
}
Pintar.clickSobreNodo(jPanel1.getGraphics(), arbol.getCordeX(nfinal),
arbol.getCordeY(nfinal), null,Color.GREEN);
}
else Pintar.clickSobreNodo(jPanel1.getGraphics(), arbol.getCordeX(nfinal),
arbol.getCordeY(nfinal), null,Color.GREEN);
}

You might also like