Strawberry Geschrieben 13. November 2010 Geschrieben 13. November 2010 Hallo, ich habe bis jetzt noch nicht so viel Erfahrung mit c++ und habe gerade ein riesiges Problem beim Einlesen von Daten aus einer txt-Datei. Meine Datei repräsentiert einen ungerichten Graphen. Sie hat die Form 1 2 3 4 2 4 5 6 ... dabei sind die zahlen 1,..,6 die Bezeichnungen für die knoten. Und stehen zwei zahlen in einer zeile heißt das, dass diese ecken jeweils durch eine kante verbunden sind. ...allerdings weiß ich nicht wie viele Ecken und Kanten der Graph insgesamt hat. Ich würde jetzt gerne diese Datei in einen 2-dimensionalen array einlesen. Allerdings habe ich dafür so gar keinen Ansatz (vorallem da ich nciht weiß wie viele Kanten ich einlesen muss.....:confused: Also wenn mir jemand helfen würde, wäre das SUPER!!!! Zitieren
chooter696 Geschrieben 13. November 2010 Geschrieben 13. November 2010 also ich hab deine frage nicht ganz verstanden. 0.o Zitieren
flashpixx Geschrieben 14. November 2010 Geschrieben 14. November 2010 also ich hab deine frage nicht ganz verstanden. Graphen werden oft als Repräsentation von Graphen im Computer ? Wikipedia dargestellt und genau diese Darstellung hat der OP vorliegen als Textdatei. Für die Darstellung des Graphen wäre Boost Graph Library: Adjacency Matrix eine Möglichkeit, sowie eben das genannte Array, dafür musst Du aber im Vorfeld die Größe des Graphen kennen. Im Grunde musst Du die Datei zeilenweise einlesen und eben anhand eines Separators zerlegen. Im korrekten Fall solltest Du genauso viele Zeilen wie Spalten haben und kannst daraus die Adjazenzmatrix erzeugen. Zitieren
Klotzkopp Geschrieben 15. November 2010 Geschrieben 15. November 2010 Man könnte die Datei zuächst in eine list<pair<int, int> > einlesen, dann die Anzahl der Knoten bestimmen und damit eine hinreichend große Matrix anlegen. Zeilenweises Einlesen oder Zerlegen sollte nicht notwendig sein, wenn der Aufbau der Datei verlässlich ist. ifstream file("deine_datei"); while(file >> k1 >> k2) { liste.push_back(make_pair(k1, k2)); }[/code] Zitieren
flashpixx Geschrieben 15. November 2010 Geschrieben 15. November 2010 Man könnte die Datei zuächst in eine list<pair<int, int> > einlesen, dann die Anzahl der Knoten bestimmen und damit eine hinreichend große Matrix anlegen. ein pair wird normalerweise für eine Adjazenzmatrix nicht ausreichen, denn man hat eine quadratische Matrix und nicht wie in dem Beispiel immer nur Paare, somit muss ich zeilenweise parsen Zitieren
Klotzkopp Geschrieben 15. November 2010 Geschrieben 15. November 2010 denn man hat eine quadratische Matrix und nicht wie in dem Beispiel immer nur Paare Hat man? Strawberry hat zwar gesagt, was es bedeutet, wenn zwei Zahlen in einer Zeile stehen. Er hat leider nicht gesagt, was es bedeutet, wenn es mehr oder weniger Zahlen sind, und im Beispiel kommt so etwas auch nicht vor. Ich bin davon ausgegangen, dass die Datei einfach eine Auflistung der Kanten enthält. Zitieren
flashpixx Geschrieben 15. November 2010 Geschrieben 15. November 2010 Er hat leider nicht gesagt, was es bedeutet, wenn es mehr oder weniger Zahlen sind, und im Beispiel kommt so etwas auch nicht vor. Da hast du recht. Wichtig wäre zu wissen, ob es sich um eine Adjazenzliste oder um eine -matrix handelt. Beides wird die Repräsentation von Graphen verwendet, wobei man mit einem pair die Liste verarbeiten kann, wenn man dann noch beachtet, dass es sich um eine einfach-verkettete Liste (nach Definition) handelt. Ansonsten müsste man eben das ganze als Matrix verarbeiten Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.