((C[l,i]<>0)
((C[l,i]<>0) or (C[i,l]<>0)) then
if F[l,i]<C[l,i] then begin{дуга прямая?}
P[i,1]:=l; if P[l,2]<C[l,i]-F[l,i] then P[i,2]:=P[l,2]
else P[i,2]:=C[l,i]-F[l,i];
end
else if F[i,l]>0 then begin{дуга обратная?}
P[i,1]:=-l;
if P[l,2]<F[i,l] then P[i,2]:=P[l,2] else P[i,2]:=F[i,l];
end;
M:=M-[l];{вершина с номером l просмотрена}
l:=1;{находим помеченную и непросмотренную вершину}
repeat Inc(l) until (l>N) or ((P[l,1]<>0) and (l in M));
if l>N then Lg:=false;
end;
end;
Логика изменения потока F имеет вид:
procedure Stream(q:integer);
begin
{определяем тип дуги - прямая или обратная, знак минус у номера вершины - признак обратной дуги}
if P[q,1]>0 then F[P[q,1],q]:=F[P[q,1],q]+P[t,2]
else F[q,abs(P[q,1])]:=F[q,abs(P[q,1])]-P[t,2];
{если не вершина-источник, то переход к предыдущей вершине цепочки}
if abs(P[q,1])<>s then begin
q:=abs(P[q,1]);Stream(q);end;
end;
Итак,
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа