Algorithmus gesucht:

Es geht um die Erkennung von zusammenhängenden rechteckigen Blöcken von Elementen in einer Matrix von 20x8.
Jedes Element kann „1“ oder „0“ sein.
Ein Block darf nur aus Elementen bestehen die „1“ sind.

Das Ergebnis ist eine Liste von Koordinaten:
x1,y1 = obere linke Ecke des Blocks.
x2,y2 = untere rechte Ecke des Blocks.

Außerdem muss die Liste nach Größe der Blöcken sortiert sein,
der größte Block zuerst.

Die C-Routine die die Aufgabe erledigt kann wie folgt aufgerufen werden:

unsigned char matrix[20][8];
// Jedes Element wird durch ein byte representiert

unsigned char * blockliste(unsigned char *matrix){

}

oder eine andere speichersparendere Möglichkeit wäre:

unsigned long matrix[8];
// Jedes Element wird durch ein bit representiert

unsigned char * blockliste(unsigned long *matrix){

}

Natürlich sollte die Lösung möglichst effektiv (hinsichtlich des Speicherverbrauchs und der Ausführungszeit) arbeiten, denn das Zielsystem ist ein kleiner Microkontroller,

Danke,
Yannick.

Hi,
flitz doch mit For-Schleife und guck erstmal wo zusammenhängende 1ser vorkommen.

Oder nimm ne horizontale und ne innere vertikale Schleife die so lang läuft bis 0.

Welches Rechteck hat Vorrang für dich?
1)
1 1 1 1 1 1

oder
2)
1 1 1 1 1 1
1 1 1 1 1 1

Zählst du also das erste Aufkommen oder suchst du lieber nach großen Rechtecken? (Ist 2) also 2 Rechtecke oder ein großes)

Grüße
Ich denke du hast schon einen Ansatz :wink: