Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2018
    Messaggi
    3

    Codice in c++ che non fa quello che deve.

    Sto facendo un esercizio sui cammini minimi in c++. Sembra funzionare tutto, non ci sono errori in debug ma alla fine quando stampo i cammini mi stampa il cammino giusto ma con un elemento in meno.
    Copio tutto il progetto.
    Mi scuso se ho sbagliato i modi e luoghi per pubblicare questo problema.
    il risultato del cammino dovrebbe essere : 0 14 15 3 7 5 11 4 2 6 1 13 9 10 12 8 0
    ma risulta essere senza il nodo 15.
    condivido anche il kingdom.txt da cui prendere le coordinate


    #include "kingdom.h"

    double kingdom::calcDistanza(nodo from, nodo dest) {

    double x = (dest.getFirst() - from.getFirst());
    x = x*x;
    double y = (dest.getSecond() - from.getSecond());
    y = y*y;
    double somma = x+y;
    double distanza = sqrt(somma);
    return distanza;
    }

    void kingdom::inizializzaMappa(){
    for( int i=0; i< n_isole ; i++) {
    for(int j=0; j<n_isole ; j++){
    if(i==j){
    distMap[i][j] = 0;

    } else {
    distMap[i][j] = calcDistanza(isole[i], isole[j]); //calcola distanza ed assegna alla tabella distmap
    }
    }
    }
    for( int i=0; i< n_isole; i++) {
    for (int j = 0; j < n_isole; j++) {
    cout << distMap[i][j] << " ";
    }
    cout << endl;
    }

    }

    void kingdom::stampaIsole(){
    for (int i= 0; i< n_isole +1 ; i++){
    nodo temp = isole[i];
    cout << "le coordinate dell'isola " << temp.getName() << " sono : " << temp.getFirst() << " " << temp.getSecond() << endl;
    }
    }


    int kingdom::VicinoMinimo(double *distanza){
    double min = INT_MAX;
    int index = 1;
    for(int i=1; i< n_isole; i++){
    if(!visitato[i]){
    if( distanza[i] < min){
    min = distanza[i];
    index = i;
    }
    }
    }
    return index;
    }

    double kingdom::nearestNeighbourPath(){
    for (int i= 0; i < n_isole ; i++){
    visitato[i]= false;
    }

    int isolaCorrente = 0, prossimaIsola;
    actualPath.push_back(0); //inizio dalla capitale
    visitato[0] = true; //visita capitale
    double totale = 0; //inizializza totale
    for (int i= 1; i < n_isole ; i++){ //ciclo per tutte le isole
    prossimaIsola = VicinoMinimo(distMap[isolaCorrente]); //cerchiamo con la funzione viciniminimo la prossima isola
    cout << "\nsto prendendo l'isola : " << prossimaIsola << endl;
    visitato[prossimaIsola] = true; //settiamo come visitata l'isola
    for (int i = 0; i< visitato.size(); i++) {
    cout << visitato[i] << ' ' ;
    }
    nodo temp1 = isole[prossimaIsola]; //estraiamo il nodo in una variabile temporanea
    actualPath.push_back(temp1.getName()); //salviamo in un array il cammino
    totale = totale + distMap[isolaCorrente][prossimaIsola]; //aggiorniamo il totale
    isolaCorrente = prossimaIsola; //aggiorniamo l'isola corrente
    }

    //aggiungiamo il ritorno alla capitale
    actualPath.push_back(0);
    totale = totale + distMap[isolaCorrente][0];
    costo1 = totale;
    cout << "\nDistanza totale con Nearest Neighbour Algorithm = " << costo1 << endl;
    cout << "Cammino utilizzato dall'algoritmo : " << endl;
    for (int i = 0; i <actualPath.size(); i++) {
    cout << actualPath[i] << ' ';
    }
    return costo1;
    }

  2. #2
    Ciao, la vedo dura che qualcuno si scarichi il sorgente e lo testi per te.
    TI consiglio di mettere delle printf ovunque in modo da controllare passo per passo, magari usando anche delle breakpoint e vedere in quel momento i valori delle variabili.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2018
    Messaggi
    3
    ho risolto. Grazie mille

  4. #4
    A parte che non hai condiviso il file "kingdom.txt", perché non dici come hai risolto il problema?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.