Bild des richtigen Algorithmus ist mehr als tausend Worte wert ist, so:Was für die Suche nach isolierten Untergruppen
Mein Eingang die Matrix auf der linken Seite ist, und was wir finden müssen, ist, die Sätze von Knoten, die sind maximal einen Schritt voneinander entfernt (nicht diagonal). Knoten, die mehr als einen Aufwärts/Abwärts/Links/Rechts-Schritt entfernt sind, würden in einem separaten Satz sein.
Also, mein Plan lief ein BFS von jedem Knoten, den ich finde, dann die Menge zurück, die es durchquerte, und es von der ursprünglichen Menge entfernend. Wiederhole diesen Prozess, bis ich fertig bin. Aber dann hatte ich die wilde Idee, nach Graph-Analysewerkzeugen zu suchen - und ich habe NetworkX gefunden. Gibt es einen einfachen Weg (Algorithmus?), Um dies zu erreichen, ohne BFS manuell zu schreiben und die gesamte Matrix zu durchlaufen?
Dank
Welches Format haben Sie eingegeben? Ist jeder Punkt nur als ein Koordinatenpaar aufgeführt, oder haben Sie die Verbindungsinformationen explizit? Außerdem hat 'networkx' eine breite erste Suche. – BrenBarn
Es ist eine Matrix von Koordinaten. Ich kann die bfs implementieren, kein Problem - aber dann muss ich auch die ganze Matrix iterieren und sie jedes Mal reduzieren, wenn eine Teilmenge gefunden wird. Hatte gehofft, etwas Arbeit zu sparen. – MeLight
Warum müssen Sie die Matrix erneut durchlaufen? Wenn Sie die besuchten Knoten bereits markiert haben, müssten Sie das nicht, oder? Sollte <10 Zeilen Code insgesamt sein, wenn Sie Ihr eigenes BFS verwenden, aber Sie können auch [this] (https://networkx.github.io/documentation/networkx-1.9.1/reference/generated/networkx.algorithms verwenden. components.connected.connected_component_subgraphs.html) –