PDA

Visualizza la versione completa : Funzione c++ che non va.


SalvFro
31-12-2018, 00:30
Ragazzi ho una funzione che non mi funziona. E' una piccola funzione, ho aggiunto i commenti per contestualizzare. Spiego il problema:
bestpath un vector di int (questi int sono i nomi delle isole);
isole un vector di nodi
visitato un vector booleano per tenere traccia delle isole visitate e non.
Questa funzione dovrebbe stamparmi il cammino minimo per visitare tutte le isole, ma mi stampa i numeri progressivi. Qualche aiutino?



double kingdom::camminoMinimo(double dist, int cur, double costo1, int j, double distanzafinale){
if(j==n_isole+1) { // j un contatore. Se tutte le isole sono state visitate ritorna alla capitale e aggiungilo al cammino
BestPath[j] = 0; //Aggiungiamo 0 alla fine del cammino (torniamo alla capitale)
return dist + distMap[cur][0]; //aggiungiamo alla distanza totale l'ultimo step per tornare alla capitale
}

for(int i=1;i<n_isole + 1 ; i++){
if(!visitato[i]){
visitato[i]= true; // indichiamo l' i-esima isola come visitata
// se la distanza corrente + la distanza dalla prossima isola + ritorno a capitale minore di costo1(greedy) o minore di distanzafinale
if(dist + distMap[cur][i] + distMap[i][0] < distanzafinale && dist + distMap[cur][i] + distMap[i][0] <= costo1){

double temp = camminoMinimo(dist + distMap[cur][i], i, costo1, j+1, distanzafinale);

if(temp<distanzafinale){ //se il cammino trovato in modo ricorsivo risulta minore della distanza totale attuale, andiamo a salvare il cammino minimo
nodo nodotemp = isole[j];
BestPath[j]= nodotemp.getName();
distanzafinale = temp;
}
}
visitato[i] = false;
}
}
return distanzafinale;
}

double kingdom::camminoMinimo() {
for (int i=0; i< n_isole; i++){ //vector booleano inizializzato a false
visitato[i] = false;
}
for (int i=0;i< n_isole + 2; i++){ //vector di int per salvare il cammino, inizializzato a 0 + 2 elementi per inizio e fine cammino
BestPath.push_back(0);
}
visitato[0] = true; // partenza dalla capitale
BestPath[0] = 0; // primo step del cammino
costo2 = camminoMinimo(0.0, 0, costo1, 1, INT_MAX); //funzione per trovare il cammino minimo. Ritorna il costo in km

cout << "\nCosto ottimale: " << costo2 << "\n Cammino ottimale :" ; // stampa delle informazioni
for(int i=0; i< BestPath.size(); i++){
cout << BestPath[i] << ' ';
}
return costo2;
}

Loading