003
03.05.2008, 18:53 Uhr
Fingolin
|
Ich hab mir jetzt eine Funktion geschrieben,die den kürzesten weg suchen soll^^ sieht wie folgt aus:
C++: |
int SucheStrecke(char *pStartpunkt,cStrecke *pStrecken,int AnzahlStrecken,cPunkt *pPunkt,int AnzahlPunkte) { for (int i=0;i<AnzahlStrecken;i++) { if (strcmp(pStrecken[i].Endpunkt_Name,pStartpunkt)==0) { cout <<">>" << pStrecken[i].Endpunkt_Name<< "<<" <<" führt zu " << pStrecken[i].Anfangspunkt_Name << endl; if (pPunkt[i].Markiert==false) { pPunkt[i].Markiert=true; strcpy(pPunkt[i].Vorgaenger,pStartpunkt); pPunkt[i].Laenge=(pStrecken[i].Laenge+Vorgaengerlaenge(pStrecken[i].Anfangspunkt_Name,pPunkt,AnzahlPunkte)); } if (pPunkt[i].Markiert==true && pPunkt[i].Laenge>pStrecken[i].Laenge+Vorgaengerlaenge(pStrecken[i].Anfangspunkt_Name,pPunkt,AnzahlPunkte)) { strcpy(pPunkt[i].Vorgaenger,pStartpunkt); pPunkt[i].Laenge=(pStrecken[i].Laenge+Vorgaengerlaenge(pPunkt[i].Vorgaenger,pPunkt,AnzahlPunkte)); } } if (strcmp(pStrecken[i].Anfangspunkt_Name,pStartpunkt)==0) { cout <<">>" << pStrecken[i].Anfangspunkt_Name<< "<<" <<" führt zu " << pStrecken[i].Endpunkt_Name << endl; if (pPunkt[i].Markiert==false) { pPunkt[i].Markiert=true; strcpy(pPunkt[i].Vorgaenger,pStartpunkt); pPunkt[i].Laenge=(pStrecken[i].Laenge+Vorgaengerlaenge(pStrecken[i].Endpunkt_Name,pPunkt,AnzahlPunkte)); } if (pPunkt[i].Markiert==true && pPunkt[i].Laenge>pStrecken[i].Laenge+Vorgaengerlaenge(pStrecken[i].Endpunkt_Name,pPunkt,AnzahlPunkte)) { strcpy(pPunkt[i].Vorgaenger,pStartpunkt); pPunkt[i].Laenge=(pStrecken[i].Laenge+Vorgaengerlaenge(pPunkt[i].Vorgaenger,pPunkt,AnzahlPunkte)); } } } return 0; };
|
C++: |
int Vorgaengerlaenge(char *pVorgängername,cPunkt *pPunkt,int AnzahlPunkte) { for (int i=0;i<AnzahlPunkte;i++) { if (strcmp(pPunkt[i].Name,pVorgängername)==0) { return pPunkt[i].Laenge; } } };
|
Hier noch die Headerdatei
C++: |
#define Namenslaenge 20 class cStrecke { public: char Anfangspunkt_Name[Namenslaenge]; char Endpunkt_Name[Namenslaenge]; void Anfangspunkt_Anzeigen(); void Endpunkt_Anzeigen(); int Laenge; int Anfangspunkt_Nummer; int Endpunkt_Nummer; bool Anfangspunkt_Start; bool Endpunkt_Start; bool Anfangspunkt_Ende; bool Endpunkt_Ende; int Streckennummer; cStrecke();
};
class cPunkt { public: char Name[Namenslaenge]; void getname(); char returnname(int i); bool Markiert; int Nummer; char Vorgaenger[Namenslaenge]; int Laenge; cPunkt(); };
void GetDaten(int AnzahlPunkte,int *pPunkte,cStrecke *pStrecke,cPunkt *pPunkt); int StreckenLoeschen(cStrecke *pStrecke,int AnzahlStrecken); int SucheStrecke(char *pStartpunkt,cStrecke *pStrecken,int AnzahlStrecken,cPunkt *pPunkt,int AnzahlPunkte); void Strecken_neu(cStrecke *pStrecke,int AnzahlStrecken,cStrecke *pStrecken); int Vorgaengerlaenge(char *pVorgängername,cPunkt *pPunkt,int AnzahlPunkte);
|
Der Konstruktor:
C++: |
cPunkt::cPunkt() { Nummer=65535; Markiert=false; strcpy(Vorgaenger,"0123456789012345678"); };
|
und dann hier noch der Aufrufin der main funktion:
C++: |
for (int i=0;i<AnzahlPunkte;i++) if (strcmp(pPunkt[i].Name,Zielort)==0) { cout << pPunkt[i].Name << " erreicht über den Vorgänger: "<< pPunkt[i].Vorgaenger << endl; }
|
Habe das Problem das(nicht immer aber manchmal) pPunkt[i].Vorgaenger als "0123456789012345678" ausgegeben wird,also nicht korrekt überschrieben wird... Bin für jede Antwort dankbar MFG Fingolin -- Wenn einer mit Vergnügen zu einer Musik in Reih und Glied marschieren kann, dann hat er sein großes Gehirn nur aus Irrtum bekommen, da für ihn das Rückenmark schon völlig genügen w�rde. Dieser Post wurde am 03.05.2008 um 18:53 Uhr von Fingolin editiert. |