No lo probé porque no tengo Delphi a mano, pero supongo que es aproximandamente lo que quieres:
Recorre de arriba a abajo y de izquierda a derecha el terreno.
Si encuentra una celda vacía recorre de arriba a abajo y de izquierda a derecha las posiciones que ocuparía la casa.
Si durante la búsqueda encuentra una celda ocupada, avanza la posición, porque estoy seguro de que no entrará.
Código Delphi
[-]
const
LargoTerreno=10;
AltoTerreno=10;
LargoCasa=3;
AltoCasa=2;
var
Terreno : array[1..LargoTerreno, 1..AltoTerreno] of byte;
Casa : array[1..LargoCasa, 1..AltoCasa] of byte;
tx, ty : byte;
cx, cy : byte;
CeldaOcupada : boolean;
begin
tx := 1;
ty := 1;
while (tx < LargoTerreno) and (LargoTerreno - tx > LargoCasa) do
begin
while (ty < AltoTerreno) and (AltoTerreno - ty > AltoCasa) do
begin
if (Terreno[tx, ty]=0) then
begin
cx := 1;
cy := 1;
CeldaOcupada := False;
while (cx < LargoCasa) and (not CeldaOcupada) do
begin
while (cy < AltoCasa) and (not CeldaOcupada) do
begin
if (Terreno[tx+cx-1, ty+cy-1]=1) then
begin
CeldaOcupada := True;
ty := ty + cy;
end;
inc(cy);
end;
inc(cx);
cy := 1;
end;
if (not CeldaOcupada) then
ShowMessage(Format('Lugar encontrado: (%d;%d)', [tx, ty]));
end;
inc(ty);
end;
inc(tx);
ty := 1;
end
end;