W
Hallo, danke erstmal für die Antwort, wenn ich es so mache gehts ohne Absturz. Jetzt stürzt er allerdings in einer anderen beteiligten Funktion ab Vielleicht kann nochmal jemand drüber schauen und sagen was ich anders machen sollte bzw wo der Fehler ist...
const Routen routensuche(const std::string &startort, const std::string &zielort, const std::string &suchtyp, const Routen &allerouten)
{
Routen gefundeneRouten;
std::vector<std::string> knoten_namen = erstelle_knoten(allerouten);
adjacency_map_t adjacency_map = erstelle_karte(knoten_namen, suchtyp, allerouten); //Erstellt eine Verbindungsnetzkarte
std::map<vertex_t, weight_t> min_distance;
std::map<vertex_t, vertex_t> previous;
//Startknotennummer suchen
unsigned int startknoten=0;
while (knoten_namen[startknoten] != startort and startknoten < knoten_namen.size()) startknoten++;
DijkstraComputePaths(startknoten, adjacency_map, min_distance, previous); //Algorithmus der die kürzesten Routen zu allen möglichen Zielpunkten sucht und speichert
//Zielknotennummer suchen
unsigned int zielknoten=0;
while(knoten_namen[zielknoten] != zielort and zielknoten < knoten_namen.size()) zielknoten++;
//Gesamtroute in route r schreiben
if(suchtyp == "entfernung") {Route r(startort,zielort,min_distance[zielknoten],0); //für kürzeste Distanz
gefundeneRouten.push_back(r);}
else {Route r(startort,zielort,0,min_distance[zielknoten]); //für kürzeste Durchschnittsgeschwindigkeit
gefundeneRouten.push_back(r);} //Schreibt die gesamtroute in gefundeneRouten
//Hier tritt wahrscheinlich der Fehler auf...
//Die Teilrouten in gefundeneRouten schreiben
Routen teilrouten; //uebernimmt die gefundene Route als Routen
Route teilroute; //gefundene Route wird hier gespeichert und spaeter in routen geschrieben
//Teilknoten finden
unsigned int anzahlTeilstuecke = 0;
//Die folgende Funktion soll die Teilabschnitte finden und speichern
std::list<vertex_t> path = DijkstraGetShortestPathTo(zielknoten, previous);
std::list<vertex_t>::iterator path_iter = path.begin();
for( ; path_iter != path.end(); path_iter++)
{
anzahlTeilstuecke += 1; //Zaehlt die Teilstuecke der Strecke
std::string knoten_vorher; //wird benoetigt um die Route zum Teilstueck aus der Datenbank zu suchen
if(anzahlTeilstuecke == 1) knoten_vorher = startort; //Wenn erste Teilroute beginne mit Startort
else knoten_vorher = knoten_namen[(*path_iter - 1)]; //Wenn nicht dann Stadtname der letzten Teilroute
teilrouten = rt2->suchen(knoten_namen[*path_iter], knoten_vorher); //sucht die Route zu den beiden Orten aus der Datenbank
teilroute = teilrouten[0];
gefundeneRouten.push_back(teilroute);
}
return gefundeneRouten;
}
Der Suchalgorithmus und seine Funktionen sind von http://en.literateprograms.org/Dijkstra's_algorithm_(C_Plus_Plus) und wurden im Prinziep nicht verändert. Das Problem ist eben die Anpassung an die Schnittstellen und das automatische Erstellen der Knoten und Adjastanz Karte.