Ich schlage vor, mit Lemon, siehe Tutorial: http://lemon.cs.elte.hu/pub/tutorial/a00011.html
Generell Sie Struktur trennen (die Kurve) und die Daten. Also im Falle von Zitrone würden Sie jede Zeile lesen, teilen Sie es in 4 Felder (Trennzeichen ist das Leerzeichen). Während des Lesens der Datei sollten Sie auch den Hash oder die Map (z. B. std :: unordered_map) pflegen, um Ziele, die sich bereits im Diagramm befinden, schnell zu suchen (oder verwenden Sie die graph API, um sie zu finden, aber das wäre langsamer). So
:
ListDigraph g;
ListDigraph::NodeMap<std::string> gDestinations(g);
ListDigraph::ArcMap<int> gCosts(g);
ListDigraph::ArcMap<int> gDistances(g);
std::unordered_map<std::string, ListDigraph::Node> destinations;
Und dann für jede Zeile:
//first read the line, split it be whitespace into 4 fields, e.g. into these
std::string destFrom, destTo;
int distance, cost;
//first the structure
auto itFrom = destinations.insert(destFrom, g.addNode()).first; //dest is the first or second field in your file
auto itTo = destinations.insert(destTo, g.addNode()).first; //dest is the first or second field in your file
ListDigraph::Arc route = g.addArc(*itFrom, *itTo);
//then the data
gDestinations[*itFrom] = destFrom; //well this could be done once if the place exists already, this s for brevity
gDestinations[*itTo] = destTo; //dtto
gDistances[route] = distance; //distance is the third field
gCosts[route] = cost; //cost is the fourth field
Und das ist es. Sehen Sie das Tutorial und die Lemon-Dokumentation, wie Sie Graphalgorithmen verwenden und den Graphen usw. manipulieren.
Mit was genau kämpfen Sie? Die Datei lesen und das Diagramm erstellen oder einfach das Diagramm erstellen? Sie können eine vorhandene Grafikbibliothek für C++ verwenden, wie BGL (Dokumentation ist schrecklich) oder Lemon (die Dokumentation ist besser, könnte aber anfangs etwas unintuitiv sein). Sonst scheint es mir ziemlich einfach, oder? – Resurrection
Ich habe Probleme damit, jede Zeile einzulesen und die Daten zu speichern. Wie lese ich zwei Strings und dann zwei Ints ein und wozu soll ich sie hinzufügen? Arrays, Vektoren oder etwas anderes. –