включения (исключения)
включения (исключения) столбца с номером k в решение (из решения) имеет вид:
procedure Include(k:integer); {включить столбец в решение}
{A*, R, Price, S, P - глобальные переменные}
var j:integer;
begin
P:=P+Price[k];{текущая цена решения}
S[k]:=true;{столбец с номером k в решение}
for j:=1 to N do
if A*[j,k]=1 then R[j]:=true; {строки, “покрытые” столбцом k}
end;{Include}
procedure Exclude(k:integer);{исключить столбец из решения}
var j:integer;
begin
p:=p-Price[k];
S[k]:=false;
for j:=1 to N do if (A*[j,k]=1) and R[j] then R[j]:=false;
end;{Exclude}
Проверка, сформировано ли решение, заключается в том, чтобы просмотреть массив R и определить, все ли его элементы равны истине.
function Result:boolean;
var j:integer;
begin
j:=1;
while (j<=N) and R[j] do Inc(j);
if j=N+1 then Result:=true else Result:=false;
end; {Result}
Кроме перечисленных “кирпичиков”, нам необходимо уметь определять, можно ли столбец с номером
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа