Вас интересует конкретная реализация на delphi? Сам алгоритм не может вызвать затруднений, обычный перебор вариантов: по матрице смежности находятся все пути, затем по каждому ребру увеличивается поток на величину минимальной разницы между потоками рёбер в одном пути. Теперь как минимум одно ребро становится насыщенным, после чего - всё сначала: находятся все пути по ненасыщенным рёбрам.
Думаю, что удобнее всего решение через связанные списки. Путь можно представить как массив с размерностью матрицы смежности. Элементы массива - нули и целые числа, ниже диагонали только нули. Целое число, это номер в порядке обхода графа. Один путь - один массив. У переменной типа запись одно из полей - этот массив. Т.о. после первой итерации можно освободить память того элемента, где путь по насыщенным рёбрам.
Алгоритм составления пути по матрице смежности: цикл
Код:
for i:=1 to n do
...
for j:=i to n do
...
т.к. матрица смежности симметричная.
После нахождения первой единицы (для конкретных ij) остальная часть строки в текущей матрице смежности обнуляется. В массиве пути в этом месте ставим порядковый номер, равной переменной внешнего цикла. Соответственно для следующего прохода обнуляются соответствующие элементы матрицы смежности.