последнем столбце
последнем столбце строки всегда записан 0.}
Bl[i,k]:=Bl[i,k+1];
Inc(k);
end;{while}
end;{Press}
var i,j,cnt:integer;
begin
FillChar(Bl,SizeOf(Bl),0);
for i:=1 to N do Bl[1,i]:=i;{предполагается, что в первом блоке все столбцы}
for i:=1 to N-1 do begin
j:=1;cnt:=0;
while Bl[i,j]<>0 do begin
if A*[i,Bl[i,j]]=0 then begin{столбец не в этом блоке}
Inc(cnt);
Bl[i+1,cnt]:=Bl[i,j];{переписать в следующую строку}
Press(i,j);
Dec(j);
end;{if}
Inc(j);
end;{while}
end; {for}
Sort;
end;{Blocs}
После этой предварительной работы мы имеем вполне “приличную” организацию данных для решения задачи путем перебора вариантов. Матрица Bl разбита на блоки, и необходимо выбрать по одному элементу (если соответствующие строки ещё не покрыты) из каждого блока. Процесс выбора следует продолжать до тех пор, пока не будут включены в “покрытие” все строки или окажется, что некоторую строку нельзя включить.
Продолжим
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа