Kruskal funziona, l'ho messo a posto ma non riesco a fare Dijkstra e quindi Prim. Ho scritto Dijkstra in questo modo:
codice:
public void dijkstra(String nodoS) {
double[] dist = new double[dimStandard];
for(int x = 0; x < ultimoNodi; x++) { //per ogni nodo
dist[x] = INFINITO;
padre[x] = -1;
}
Integer inodoS = mapNodi.get(nodoS);
padre[inodoS] = inodoS;
dist[inodoS] = 0;
CodaConPriorita coda = FabbricaCodaConPriorita.crea(dimStandard);
for(int x = 0; x < ultimoNodi; x++) { //per ogni nodo
String j = arrayNodi[x].nome;
coda.inserisci(j, dist[x]);
}
while(!coda.eVuota()) {
Nodo u = new Nodo(coda.estraiPrimo()); //estraggo il primo cioe' quello con distanza minima
Integer iU = mapNodi.get(u);
for(int v = 0; v < arrayNodi[iU].listeAd.size(); v++) { //for each(Nodo v adiacente a u)
double cuv = pesoArco(u.nome, arrayNodi[v].nome);
if(dist[iU] + cuv < dist[v]) {
padre[v] = iU;
dist[v] = dist[iU] + cuv;
coda.cambiaPriorita(arrayNodi[v].nome, dist[v]); //decreasePriority(v, dist[v], coda);
}
} //end for
} //end while
}
public double pesoArco(String arco1, String arco2) {
for(int i = 0; i < ultimoArchi; i++) {
String nome1 = arrayArchi[i].nodo1 + arrayArchi[i].nodo2;
String nome2 = arrayArchi[i].nodo2 + arrayArchi[i].nodo1;
if(arrayArchi[i].info.compareTo(nome1) == 0 || arrayArchi[i].info.compareTo(nome2) == 0)
return arrayArchi[i].peso;
}
throw new IllegalArgumentException();
}
Ma non riesco a testarlo poichè il metodo pesoArco non funziona. Tale metodo dovrebbe cercare nell'array di archi quello con i due estremi chiamati arco1 e arco2 e restituire il peso di quest'arco.
Quando vado a provare questo singolo metodo mi da errore dicendo che non lo trova. Eppure è dichiarato pubblico ed è inserito nella mia interfaccia. Dov'è il problema?
Grazie