ayuda urgente con dijsktra

[email protected]
24 de Enero del 2009
hola necesito que alguin me ayude a descifrar el error que me la el metodo camino minimo cuando hago la llamada al metodo de Dijsktra

public ILista<T> CaminoMinimo(T v1, T v2, CMM cmm) {
int L = vertices.Longitud();
ILista<T> r = new ListaArr<T>();
if (cmm.equals(CMM.Dijkstra)) {


ILista<Double> costo = new ListaArr<Double>();
costo.Insertar(0.0,L);
// double[] costo = new double[L];

// T[] antecesore = (T[]) new Object[L];
ILista<T> antecesores = new ListaArr<T>();



//da error aqui revisar que se le pase por parametro sean listas

Dijkstra( v1, antecesores, costo);

r.Adicionar(v2);
int pv2 = vertices.Buscar(v2);
ILista<T> aux = new ListaArr<T>();
aux.Insertar(v2, pv2);
// T aux. = antecesores[pv2];
while (aux != v1) {

// r.Insertar(aux, 0);
r.Insertar(v2, 0);
aux = antecesores[vertices.Buscar(aux)];
}
r.Insertar(v1, 0);
return r;
}

return null;
}

boolean NoVisitadosTodos() {
for (int i = 0; i < visitados.Longitud(); i++) {
if (!visitados.Obtener(i)) {
return true;
}
}
return false;
}

int MinimoNoVicitado(ListaArr<Double> costo) {
double min = Double.MAX_VALUE;
int pos = 0;
for (int i = 0; i < costo.Longitud(); i++) {
if (!visitados.Obtener(i)) {
double d = costo.Obtener(i);
if (d <= min) {
min = d;
pos = i;
}
}
}
return pos;
}



void Dijkstra(T v1, ListaArr<T> antecesores, ListaArr<Double> costo) {
int pos = vertices.Buscar(v1);
costo.Insertar((double)0, pos);
visitados.Insertar(true, pos);
for (int i = 0; i < costo.Longitud(); i++) {
if (EstaElArco(pos, i) != -1) {
costo.Insertar(EstaElArco(pos, i), i);
} else {
costo.Insertar(Double.MAX_VALUE, i);
}
antecesores.Insertar(v1, i);
}

while (NoVisitadosTodos()) {
int pm = MinimoNoVicitado(costo);
visitados.Insertar(true, pm) ;
for (int i = 0; i < visitados.Longitud(); i++) {
if (!visitados.Obtener(i)) {
if (EstaElArco(pm, i) != -1) {
if (costo.Obtener(i) > costo.Obtener(pm) + EstaElArco(pm, i)) {
costo.Insertar(costo.Obtener(pm) + EstaElArco(pm, i), i);
antecesores.Insertar(vertices.Obtener(pm), i);
}
}
}
}
}
}