первое паросочетание”
первое паросочетание” не требует разъяснений.
for i:=1 to N do begin {назначение переменных i, j, pp следует очевидно}
j:=1; pp:=true;
while (j<=M) and pp do begin
if (A[i,j]=1) and (YM[j]=0) then begin
XN[i]:=j;YM[j]:=i;
pp:=false;
end;
inc(j);
end;
end;
Как лучше хранить чередующуюся цепочку, учитывая требование изменения паросочетания и продумывая логику её построения? Естественно, массив, пусть это будет Chain:array[1..NMmax] of -NMmax.. NMmax, где NMmax - максимальное число вершин в графе, и его значение для рассмотренного примера равно [1, -4, 4, -2, 3, -3], то есть вершины из множества YM хранятся со знаком минус (вспомните метод построения максимального потока). Итак, поиск чередующейся цепочки.
function FindChain:boolean;
var p,yk,r:word;
begin
<инициализация данных, в частности yk:=1;>;
<нахождение свободной вершины в XN>;
if <вершина не найдена> then begin FindChain:=false;exit;end;
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа