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.