Ihr Problem scheint verbundene Komponenten zu finden. Sie sollten eine Traversierungsmethode verwenden (entweder BFS oder DFS werden die Arbeit tun). Iteriere über alle Elemente, starte für jedes Element, das nicht Null ist, einen Polygonzug und zeichne alle Elemente auf, die du in diesem Polygonzug siehst, und mache jedes besuchte Element zu Null. So etwas wie der folgende Code:
%Vor%Eine Möglichkeit, dies zu tun, ist ein Graph. Durchquere die Matrix in einer bestimmten Reihenfolge (ich gehe von links nach rechts, von oben nach unten). Wenn Sie auf ein Element stoßen, das nicht Null ist, fügen Sie es dem Diagramm hinzu. Überprüfen Sie dann alle seine Nachbarn (es sieht so aus, als ob Sie 8-verbundene Nachbarn wollen), und für jeden, der nicht Null ist, fügen Sie seinen Knoten dem Graphen hinzu und verbinden Sie ihn mit dem aktuellen Element. Die Elemente im Diagramm müssen wahrscheinlich ihre Koordinaten verfolgen, damit Sie sehen können, ob Sie ein Duplikat hinzufügen oder nicht. Wenn Sie die Matrix durchlaufen haben, haben Sie einen Graphen, der eine Gruppe von Clustern enthält. Cluster sollten Untergraphen von verbundenen Elementen sein.
Sie möchten Kennzeichnung für verbundene Komponenten durchführen. Dies wird normalerweise als Bildverarbeitungsalgorithmus betrachtet, entspricht jedoch dem, was Sie beschreiben.
Sie erhalten auch Empfehlungen von K-means, weil Sie ein 2D-Zahlenfeld angegeben haben und es leicht ist, das als Array von 2D-Zahlen zu interpretieren . K-means findet Cluster von Punkten in einer Ebene, nicht verbundene Gruppen in einem 2D-Array, wie Sie es wünschen.
Codebeispiel:
%Vor%Algorithmus Erklärung: