Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DM_2 / ОДМлек / СРМлек53.pps
Скачиваний:
55
Добавлен:
12.05.2015
Размер:
330.75 Кб
Скачать

Крок 3. Повторювати крок 2 доти, доки або стік — вершина хt — буде позначена, або вершина хt буде не

позначена і ніяких інших позначок не можна буде розмістити. В першому випадку переходимо до операції Б, а в другому випадку алгоритм закінчує роботу з максимальною течією . У другому випадку множина позначених вершин і множина непозначених вершин утворюють два боки мінімального перерізу (Xs, Xt).

Операція Б (збільшення течії).

Крок 4. Покласти х = хt і перейти до кроку 5.

Крок 5. Якщо позначка у вершині х має вигляд (+z,l(х)), то змінити течію вздовж дуги (z,х) з (z,х) на(z,х)+l(х).

Якщо позначка у вершині x має вигляд (-z,l(х)), то змінити течію вздовж дуги (х,z) з (х,z) на (х,z)-l(х).

Крок 6. Якщо z=хs, то стерти всі позначки і

повернутися до кроку 1, щоб знов почати розміщувати позначки, але використовуючи вже поліпшену течію, що знайдена на кроці 5. Якщо z хs,

то взяти х=z і повернутися до кроку 5.

Алгоритм розміщення позначок (операція А) зображує пошук шляху від джерела хs до стоку хt

вздовж якого можна збільшити течію, не перевершуючи пропускних здатностей на дугах і зберігаючи течію у проміжних вершинах. Якщо стік виявився позначеним, то такий шлях (відповідно — аугментальний ланцюг) знайдений і вздовж нього легко збільшити течію. Якщо ж операція А закінчилася, а стік виявився непозначеним, то течія була максимальною — її не можна збільшити. Множина дуг, що ведуть з позначених вершин до непозначених, утворює мінімальний переріз, оскільки позначені вершини саме складають множину Xs.

Приклад. Знайти максимальну течію у мережі.

1. Візьмемо течію, що зображена на рисунку як початкова припустима течія. Вона має величину 3.

2. Привласнимо джерелу, вершині х1, позначку (+, ). Вершина х1 позначена, але не переглянута.

3. Переглянемо вершини, суміжні з вершиною х1. Вершині х2 привласнимо позначку (+х1,1), а вершині

х3 — позначку (-х1,2) ( (х1,х2)=5<6=c1, (х3,х1)=2>0). Вершина х1 позначена і переглянута, а вершини х2 і х3

позначені, але не переглянуті.

4. Переглянемо вершини, суміжні з вершиною х3. Із вершин, суміжних з вершиною х3, не позначені вершини х4 і х5. Вершині х4 привласнимо позначку (- х3,2), оскільки (х4,х3)=4>0 і min(2,4)=2. Вершину х5 не позначаємо, оскільки (х5, х3) = 0.

5.Переглянемо вершини, суміжні з вершиною х2. Вершині х5 привласнимо позначку (+х2,1), оскільки(х2,х5)=7<8=c5. Стік позначений. Переходимо до операції Б — збільшення течії.

6.Стік має позначку (+х2,1). Тому збільшуємо течію вздовж дуги (х2, х5) на 1.

7.Вершина х2 має позначку (+х1,1). Тому збільшуємо течію вздовж дуги (х1,х2) на 1. Ми одержали нову течію величини 4.

8.Стираємо всі позначки.

9. Привласнюємо вершині х1 позначку (+, ).

10. Переглянемо вершини, суміжні з вершиною х1. Вершині х3 привласнимо позначку (-х1,2). Вершину х2 не позначаємо, оскільки (х1,х2)=6=c(y1).

11. Переглянемо вершини, суміжні з вершиною х3. Вершині х4 привласнимо позначку (-х3,2), оскільки(х4,х3)=4>0, l(х3)=2 i min(2,4)=2.

12. Переглянемо вершини, суміжні з вершиною х4. Вершині х5 привласнимо позначку (-х4,2), оскільки(х5,х4)=4>0, l(х4)=2 і min(2,4)=2. Стік позначений. Переходимо до операції Б — збільшення течії.

13.Стік має позначку (-х4,2). Тому зменшуємо течію вздовж дуги (х5,х4) на 2.

14.Вершина х4 має позначку (-х3,2). Тому зменшуємо течію вздовж дуги (х4,х3) на 2.

15.Вершина х3 має позначку (-х1,2). Тому зменшуємо течію вздовж дуги (х3, х1) на 2. Ми одержали нову течію величини 6. Ця течія є максимальною.

Перевіримо це.

Соседние файлы в папке ОДМлек