k:=(x2-x1)/(y2-y1);
p1:=k*(y-0.5-y1)+x1;
if (x-half<p1)and(p1<x+half)then begin Wave:=false; Exit end;
p2:=k*(y+0.5-y1)+x1;
if (x-half<p2)and(p2<x+half)then begin Wave:=false; Exit end
end
end;
end;
function Cover(var map:TSet;new_a:integer):boolean;
{покрыть карту map проходящим сигналом из антенны new_a}
var x,y,a:integer;
begin
Cover:=true;
for x:=1 to n do
for y:=1 to m do
begin
a:=GetIndex(x,y);
if not(a in map) and not(a in neb) then
if Wave(new_a,a) then map:=map+[a] else Cover:=false
end
end;
procedure Think;{расстановка антенн}
var
vspom:TSet;{рабочее расположение}
num:integer;{рабочее число антенн}
procedure Step(map:TSet;new_a:integer);