[PYTHON] Speichern Sie die Knotenstruktur in C ++ aus dem NetworkX-Dateiformat

Ein Graph ist eine der allgemeinen Datenstrukturen, die aus den Kanten von Punkten aufgebaut sind. In bekannten Beispielen können Freundesnetzwerke und Webseiten auch als Diagramme dargestellt werden.

Heute ist Pythons Networkx ein sehr nützliches Werkzeug für den Umgang mit Grafiken. Eine sehr praktische Bibliothek, die einfach zu schreiben und zu schreiben ist. Wenn Sie sich mit Grafiken befassen möchten, sollten Sie es zuerst versuchen.

NetworkX hat jedoch das Problem, dass es für große Grafiken sehr schwer ist.

In diesem Artikel wird daher die Verwendung von C ++, einem Hochgeschwindigkeitsprozess, für Informationen zur Diagrammkonstruktion in C ++ vorgestellt, die beim Erstellen eines Diagramms in NetworkX im Dateiformat vorliegen.

Voraussetzung ist, dass Sie wissen, wie man C ++ schreibt. Es gibt eine Beschreibung zu Networkx, aber es gibt kein Problem, auch wenn Sie nichts über NetworkX wissen.


Knoten im Netzwerk X-Format

In NetworkX werden die Ursprungspunkte der Scheitelpunkte geschrieben, indem jeder Scheitelpunkt durch ein Leerzeichen für jede Linie getrennt wird.

Die Datei hat dieses Format.

facebook_combined.txt


0 1
0 2
0 3
0 4
0 5
0 6
︙

Das Format ist (Startpunktknoten-ID) (Endpunktknoten-ID).

Network X kann solche Knoteninformationen sofort verarbeiten, C ++ erfordert jedoch viel Arbeit. Als tatsächliche Prozedur

  1. Lesen Sie die Datei
  2. String teilen
  3. Zuordnung zum Vektor

Ich werde in der Reihenfolge erklären.

Datei lesen

	string path = argv[1];
	string num_nodes = stoi(argv[2]);
	ifstream ifs(path);

	vector<vector<int>> nodes;
	nodes = vector<vector<int>>(num_nodes);

String-Split-Funktion

vector<string> split(string& input, char delimiter){
    istringstream stream(input);
    string field;
    vector<string> result;
    while (getline(stream, field, delimiter)) {
        result.push_back(field);
    }
    return result;
}

Dies ist eine in C ++ übliche Funktion zum Teilen von Zeichenfolgen. Es verwendet die Zielzeichenfolge und das geteilte Zeichen als Argumente, teilt die Zeichenfolge mit dem geteilten Zeichen und gibt einen Vektor zurück.

Lesen Sie die Datei zeilenweise, teilen Sie sie auf und weisen Sie sie dann dem Vektor zu

assignment


	string str;
	int from, to;

	while(getline(ifs, str)){
		//Durch Leerzeichen getrennt
		vector<string> strvec = split(str, ' ');
		from = stoi(strvec.at(0));
        to = stoi(strvec.at(1));
		nodes[from].push_back(to);
	}

Die Funktion getline liest die Datei zeilenweise und die Funktion split wird verwendet, um die durch Leerzeichen getrennten Zeilen zu interpretieren. Ersetzen Sie die Informationen der Startpunktknoten-ID und der Endpunktknoten-ID, die als Ergebnis zurückgegeben wurden, in einen Vektor. Auf diese Weise könnte die Strukturinformation des Knotens im Vektor gespeichert werden.

Bestätigung

	for(int i = 0; i < num_nodes; i++){
		cout << i << "->";
		for(int j = 0; j < nodes[i].size(); j++){
			cout << nodes[i][j];
			if(j != nodes[i].size()-1)cout << ",";
		}
		cout << endl;
	}

Ergebnis

1->48,53,54,73,88,92,119,126,133,194,236,280,299,315,322,346
2->20,115,116,149,226,312,326,333,343
3->9,25,26,67,72,85,122,142,170,188,200,228,274,280,283,323
4->78,152,181,195,218,273,275,306,328
︙

Auf diese Weise können Sie die Kanteninformationen des Knotens überprüfen. Bisher ist es schwer zu tun.

Recommended Posts

Speichern Sie die Knotenstruktur in C ++ aus dem NetworkX-Dateiformat
Ruft Makrokonstanten aus der C (++) - Headerdatei (.h) in Python ab
Schreiben Sie die O_SYNC-Datei in C und Python
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
Verwenden Sie libxlsxwriter, um xlsx-Dateien in C ++ zu exportieren.
Holen Sie sich Komplimente von neuen Mädchen in C # paizahack_01
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Rufen Sie Python-Skripte aus Embedded Python in C ++ / C ++ auf