Networkx: Holen Sie sich die Entfernung zwischen den Knoten
Ich bin ein Anfänger bei der Benutzung der NetworkX und ich versuche einen Weg zu finden, zu erkennen, welche Knoten haben Abstand x voneinander.
Ich habe begonnen mithilfe dieses Algorithmus, um alle Paare
path=nx.all_pairs_dijkstra_path(G)
Aber ich bin mir noch nicht sicher, wie zu erkennen der Abstand zwischen den Knoten mit einer for-Schleife.
Ich würde schätzen jede Hilfe. Danke
- Die Entfernung redest du genau? Die minimale Anzahl der Kanten zwischen zwei Knoten?
- Zum Beispiel habe ich einen geraden Pfad graph mit 5 Knoten [A,B,C,D,E] mit den Kanten (A,B) (B,C), (C,D) (D,E) und ich würde gerne wissen, den Abstand zwischen Einem Knoten und D-Knoten. Natürlich werde ich diese in einem viel größeren Programm, aber ich würde gerne wissen, der Ansatz, den ich verwenden soll. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
NetworkX hat Methoden für die automatische Berechnung der kürzesten Pfade (oder nur den Pfad-Längen) für die gewichteten und ungewichteten Graphen. Stellen Sie sicher, dass Sie verwenden die richtige Methode für Ihren Fall.
networkx.all_pairs_shortest_path - berechnet die kürzesten Pfade zwischen allen Knoten in einem ungewichtet graph
networkx.all_pairs_shortest_path_length - berechnet die Längen der kürzesten Wege zwischen allen Knoten in einem ungewichtet graph
networkx.all_pairs_dijkstra_path - berechnet die kürzesten Pfade zwischen allen Knoten in einem gewichtet graph
networkx.all_pairs_dijkstra_path_length - berechnet die Längen der kürzesten Wege zwischen allen Knoten in einem gewichtet graph
Jeder von diesen Methoden werden auch ausgeführt, wenn Sie auf ein Diagramm, berechnen, ein Wörterbuch-matrix (ein "Wörterbuch der Wörterbücher") von Knoten mit entweder der jeweils kürzeste Pfad oder die Länge des kürzesten Weges als Werte. Ich werde Ihnen an einem Beispiel zeigen:
Wie Sie sehen können, erzeugt einen Graphen mit fünf Knoten und verknüpft mit jedem Knoten der nächsten mit einer Kante. Ich habe gespeichert eine matrix der kürzesten Wege in
sp
und eine matrix der kürzesten Pfadlängen inspl
. Wenn ich wissen muss, um den kürzesten Pfad zwischen zwei Knoten, z.B. den Knoten"A"
und Knoten"E"
ich einfach Zugriffsp
wie eine matrix, oder ein dictionary von dictionaries:sp["A"]["E"]
. Es wird dann wieder die ganze kürzesten Pfad zwischen den beiden Knoten. Die Methode für den kürzesten Pfad der Länge arbeitet in einer ähnlichen Weise, aber es wird wieder nur die Anzahl der Kanten zwischen zwei bestimmten Knoten.Nächsten Codeausschnitt könnte es klarer, was ich meine, mit einem Wörterbuch-matrix. Wenn ich alle Einträge in
sp
für Knoten"A"
ist, gibt es ein weiteres Wörterbuch mit Einträgen für alle anderen Knoten:Wenn Sie möchten, heraus zu überprüfen den Abstand zwischen allen Knoten mithilfe
for
Schleifen, könnte man nur die Iteration über die Schlüssel des ersten Wörterbuch der matrix und dann über die Wörterbücher, die im inneren des Wörterbuchs. Es ist einfacher als es klingt:Bitte lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.
sp = dict(nx.all_pairs_shortest_path(G))
.