Vielleicht reden wir mal nicht von "Buttons" sondern von Steinen in einem Spielfeld.
Man nehme eine leere Liste von TPoint.
Delphi-Quellcode:
function CheckPoint(punkt : TPoint):integer;
begin
result := 0;
if AusserhalbSpielfeld(punkt) then
Exit;
// prüfe, ob der Punkt schon mal gefunden wurde
if IstInListe(punkt) then
Exit;
if spielfeld[punkt.x, punkt.y] = belegt then
begin
FügeHinzuZurListe(punkt);
Inc(result); // den Stein zählen
// und jetzt alle 4 Himmelrichtungen testen
// rekursiver Aufruf
Inc(Result, CheckPoint(Point(punkt.x+1,punkt.y));
Inc(Result, CheckPoint(Point(punkt.x-1,punkt.y));
Inc(Result, CheckPoint(Point(punkt.x,punkt.y+1));
Inc(Result, CheckPoint(Point(punkt.x,punkt.y-1));
end;
end;
Nachdem diese rekursive Funktion alle belegten Felder abgegrast hat, erhält man als
Ergebnis (Result) die Anzahl der zusammenhängenden Steine.
[edit]der Eingabeparameter
"in" war ungeschickt gewählt, da ein Pascal Keyword. Er heisst jetzt
"punkt"[/edit]