Skocz do zawartości

najkrótsza droga między miastami c++


Recommended Posts

Witam, pisze program który ma podobne działanie jak komiwojażer ale nie tak skomplikowane.

Cały kod napisałem problem jest taki ze nie wyświetla nazw miast w odpowiedniej kolejności, siedzę nad tym już kilka godzin zmieniam na różne sposoby warunki ale bez skutku. Będe bardzo wdzięczny za szybką pomoc.

#include<iostream>
#include<math.h>

using namespace std;

int main()
{
    double wspol_x[6]={0,52.259,50.060,50.049,52.399,54.360};
    double wspol_y[6]={0,21.020,19.956,21.999,16.900,18.639};
    string nazwa[6]={"","Warszawa","Krakow","Rzeszow","Poznan","Gdansk"};
    cout<<"Z kad zaczac ? (1-Warszawa;2-Krakow;3-Rzeszow;4-Poznan;5-Gdansk) \n";
    int a,b,c,e,g,i,j;
    string f;
    double d,h;
    cin>>a;
    cout<<"Zaczynasz z miasta : "<<nazwa[a]<<endl;
    double odl[6];
    double odl_ost[6];
    string segr[6];
    string pom[6];
    int licz[6]={9,9,9,9,9,9};
   g=1;
   i=1;
   j=1;
   segr[1]=nazwa[a];
    for(b=1;b<=5;b++)
    {
        //licz[b]=a;
       for(c=1;c<=5;c++)
        {
            if(b==1)
            {
                d=sqrt(pow(wspol_x[a]-wspol_x[c],2)+pow(wspol_y[a]-wspol_y[c],2));
                odl[c]=d;
                pom[c]=nazwa[c];
            }
            else
            {
                if((wspol_x[c]!=0)&&(wspol_y[c]!=0))
                {
                    d=sqrt(pow(wspol_x[a]-wspol_x[c],2)+pow(wspol_y[a]-wspol_y[c],2));
                    odl[c]=d;
                    pom[c]=nazwa[c];
                }
            }
        }
        //-----w celu sprawdzenia poprawnosci---
        cout<<endl;
        for(int s=1;s<=5;s++)
            cout<<odl[s]<<"  ";
            //------------
        for(e=1;e<=30;e++)
        {
            if(odl[g]>odl[g+1])
            {
                h=odl[g];
                odl[g]=odl[g+1];
                odl[g+1]=h;
                f=pom[g];
                pom[g]=pom[g+1];
                pom[g+1]=f;
                //pom[g]=nazwa[g+1];
            }
            /*if(odl[g]<odl[g+1])
            {
                //pom[g]=nazwa[g];
            }*/
            if(g+1==5)
                g=1;
            g++;
        }
        //---w celu sprawdzenia poprawnosci-----
        cout<<endl;
        for(int s=1;s<=5;s++)
            cout<<odl[s]<<"  ";
            //------------
            //--------
        cout<<endl;
        for(int s=1;s<=5;s++)
            cout<<pom[s]<<"  ";
            //------------
       /* if(b==1)
        {
            if(odl[1]==0)
            {
                segr[b+1]=pom[2];
                odl_ost[b+1]=odl[2];
                while(i<=5)
                {
                    if(pom[2]==nazwa[i])
                        a=i;
                    i++;
                }
            }
        }
        if(b>1)
        {
            if(odl[1]==0)
            {
                segr[b+1]=pom[2];
                odl_ost[b+1]=odl[2];
                while(i<=5)
                    {
                        if(pom[2]==nazwa[i])
                            a=i;
                        i++;
                    }
            }
        }*/
        wspol_x[a]=0;
        wspol_y[a]=0;
        nazwa[a]=" ";
        while(i<=5)
        {
            if(odl[i]!=0)
            {
                if(b==1)
                {
                    segr[b+1]=pom[i];
                    
                }
                else
                    segr[b+1]=pom[b];
                //segr[b+1]=pom[i];
                odl_ost[b+1]=odl[i];
                a=i;
                break;
            }
            i++;
        }
        i=1;
        for(j=1;j<=6;j++)
        {
            odl[j]=0;
            pom[j]=" ";
        }

    }
    cout<<endl<<"Wyruszasz z "<<segr[1]<<" do "<<segr[2]<<endl;
    cout<<" Z "<<segr[2]<<" do "<<segr[3]<<endl;
    cout<<" Z "<<segr[3]<<" do "<<segr[4]<<endl;
    cout<<" Z "<<segr[4]<<" do "<<segr[5]<<endl;
    cout<<" Z "<<segr[5]<<" wracasz do "<<segr[1]<<endl;
    return 0;

} 
Link to post
Share on other sites

Wybacz, ale czytelność kodu jest praktycznie zerowa. Cały alfabet zmiennych, pętla za pętlą a to wszystko w jeszcze innej pętli. Nie wiem czy ktoś z forum znajdzie wystarczająco dużo czasu i cierpliwości żeby to ogarnąć :P

Refaktoryzuj kod, przede wszystkim dzieląc go na funkcje, ograniczając liczbę zmiennych i nadając im odpowiednie nazwy. Problemy z debugowaniem biorą się właśnie z tego, że kod jest nieczytelny, również wtedy popełnia się o wiele więcej błędów. Bardzo możliwe że podczas refaktoryzacji sam znajdziesz rozwiązanie :)

Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...