Ich verwende NetworkX, um das folgende Diagramm zu erstellen.NetworkX - Pfad um einen Knoten
Der Graph erstellt wird:
G = nx.grid_2d_graph(4,3)
Danach zwei Knoten modifiziert werden im Hinblick auf ihre Positionen (nur die Figur zu erklären, nicht notwendig für die Antwort).
Verwendung des folgenden Codes:
G.neighbors((1, 1))
Ausgänge:
[(0, 1), (1, 2), (1, 0), (2, 1)]
Was ich dazu brauchen, sind die Punkte:
[(0, 2), (2, 2), (2, 0), (0, 0)]
Dies würde eine "Schleife" machen rund (1, 1) enthält alle Knoten in dieser "Schleife". Da ich die korrekte Benennung in Graphen nicht kenne, fällt es mir schwer, nach dem zu suchen, wonach ich suche.
EDIT:
Nachdem er von @orestiss inspiriert und Hantieren kam ich mit diesem nach oben.
l = list()
center = (1, 1)
for neighb in G.neighbors(center):
others = [n for n in G.neighbors(center) if n != neighb]
for other in others:
l.append([n for n in nx.common_neighbors(G, neighb, other) if n != center])
l.append([neighb])
lf = list(set([item for sublist in l for item in sublist]))
Damit ich alle Knoten erhalten, die um Zentrum im Zyklus sind, mit Ausnahme Zentrum selbst. Dies funktioniert auch für Grenzknoten.
Dieses Konzept Sinn in einem quadratischen Gitter macht, aber vielleicht nicht für andere Graphen. Können Sie uns ein bisschen mehr darüber erzählen, warum Sie danach suchen, damit wir eine angemessene Antwort geben können? – Joel
Ich arbeite mit quadratischen Gittern zur Gittergenerierung für CFD-Simulationen (sogenannte block-strukturierte Netze). Um einige Mesh-Glättungsalgorithmen (z. B. winkelbasierte Glättung) implementieren zu können, benötige ich die Referenz zu diesen Knoten. Ich habe meine eigene Datenstruktur, aber ich möchte Graphen übernehmen, da es dort bereits viele andere Funktionen gibt, die ich für meine Projekte anwenden kann. Und ich möchte mehr Wissen über Graphen bekommen :) – chiefenne