Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Алгоритм нахождения максимального потока



Задача. Задан орграф с пропускными способностями с, значения которых указаны рядом с каждой дугой. Найти максимальный поток из источника s в сток t.

Рисунок 3.1 - Исходный орграф

Решение. Пропустим по орграфу произвольный поток, для чего зададим для каждой дуги e потоковую функцию f, удовлетворяющую условиям:

1) ;

2) для каждой вершины, отличной от s и t, сумма потоковых функций входящих дуг равна сумме потоковых функций исходящих дуг.

Получим граф, изображенный на рис. 3.2, где первое число рядом с дугой обозначает ее пропускную способность, второе – потоковую функцию. Суммарный поток, исходящий из источника, Равный ему поток входит в сток:

Рисунок 3.2 - Орграф с суммарным потоком 9

Присвоим тип I каждой дуге, для которой потоковая функция меньше ее пропускной способности, и тип D- каждой дуге, для которой потоковая функция отлична от нуля.

Рисунок 3.3 - Орграф с указанными типами дуг

На рис 3.3 изображен граф с указанными типами дуг. Отметим, что дуга (s,a) является одновременно как дугой типа I, так и дугой типа D.

Попытаемся найти в графе увеличивающую цепь, т.е. простую цепь из источника в сток, в которой каждая дуга, направленная из s в t, (прямая дуга) имеет тип I, акаждая дуга, направленная из t в s, (обратная дуга) -тип D. Для этого будем помечать вершины и дуги графа, начиная с источника s и используя следующее правило:

- если вершина x помечена, дуга (x,y) не помечена и имеет тип I, вершина y не помечена, то помечается дуга (x,y) и ее конец y;

- если вершина x помечена, дуга (y,x) не помечена и имеет тип D, вершина y не помечена, то помечается дуга (y,x) и ее начало y;

- других случаев пометки вершин и дуг не существует.

Если в результате окажется возможным пометить сток t, то в графе существует увеличивающая цепь, по которой можно пропустить дополнительный поток, иначе такой цепи не существует, и текущий поток является максимально возможным.

Пометим прежде всего вершину s. Из двух дуг, исходящих из этой вершины, можно пометить только дугу (s,a), имеющую тип I, и ее конец a. Далее можно пометить дугу (a,c) и ее конец c. Нельзя пометить прямую дугу (a,b), имеющую тип D, и обратную дугу (d,a), т.к. она имеет тип I. Непомеченными остаются также их вершины b и d. Далее, исходя из вершины c, помечается обратная дуга (b,c) типа D и ее начало b. Дуга (c,d) и ее вершина d не помечаются, т.к. эта прямая дуга имеет тип D. Наконец, помечаются прямая дуга (b,t) типа I и ее конец-источник t.

Таким образом, найдена увеличивающая цепь (s,a), (a,c), (b,c), (b,t).

Найдем для увеличивающей цепи резерв увеличения потока по каждой прямой дуге : d(s,a)= 4,

Рисунок 3.4 - Орграф с увеличенным потоком

d(b,t)= 3; далее найдем резерв уменьшения потока по каждой обратной дуге : d(b,c)= 1. Минимальная из этих величин есть дополнительный поток, который можно пропустить по увеличивающей цепи. Новые значения потоковой функции в прямых дугах цепи , а в обратных дугах . Граф с увеличенным потоком изображен на рис. 3.4.

Можно видеть, что суммарный поток в этом графе равен 10. Вновь определим типы дуг (рис. 3.5).

Анализ этого графа показывает, что в нем можно пометить только дуги (s,a), (a,c) и их вершины a,c. Дальнейшие пометки невозможны, и сток t остается непомеченным. Следовательно, новых увеличивающих цепей построить нельзя, и найденный поток, равный 10, является максимальным.


Рисунок 3.5 - Орграф с новыми типами дуг

Варианты заданий

Определить максимальный поток из вершины s в вершину t для графа, изображенного на рис. 3.6, с пропускными способностями дуг с.

Рисунок 3.6 – Заданный орграф

1. c(e1)=15; c(e2)=4; c(e3)=12; c(e4)=10; c(e5)=5; c(e6)=3; c(e7)=7; c(e8)=10

2. c(e1)=30; c(e2)=8; c(e3)=12; c(e4)=20; c(e5)=10; c(e6)=8; c(e7)=14; c(e8)=20

3. c(e1)=20; c(e2)=6; c(e3)=8; c(e4)=15; c(e5)=7; c(e6)=4; c(e7)=11; c(e8)=15

4. c(e1)=21; c(e2)=7; c(e3)=9; c(e4)=16; c(e5)=9; c(e6)=6; c(e7)=13; c(e8)=17

5. c(e1)=22; c(e2)=8; c(e3)=10; c(e4)=17; c(e5)=10; c(e6)=7; c(e7)=14; c(e8)=18

6. c(e1)=18; c(e2)=10; c(e3)=8; c(e4)=15; c(e5)=13; c(e6)=2; c(e7)=16; c(e8)=15

7. c(e1)=12; c(e2)=3; c(e3)=12; c(e4)=13; c(e5)=14; c(e6)=8; c(e7)=7; c(e8)=19

8. c(e1)=51; c(e2)=10; c(e3)=15; c(e4)=4; c(e5)=13; c(e6)=10; c(e7)=6; c(e8)=21

9. c(e1)=50; c(e2)=9; c(e3)=16; c(e4)=5; c(e5)=14; c(e6)=9; c(e7)=7; c(e8)=22

10. c(e1)=15; c(e2)=4; c(e3)=12; c(e4)=10; c(e5)=5; c(e6)=3; c(e7)=7; c(e8)=10

11. c(e1)=22; c(e2)=12; c(e3)=4; c(e4)=11; c(e5)=22; c(e6)=5; c(e7)=9; c(e8)=14

12. c(e1)=7; c(e2)=21; c(e3)=6; c(e4)=13; c(e5)=16; c(e6)=23; c(e7)=32; c(e8)=8

13. c(e1)=9; c(e2)=31; c(e3)=16; c(e4)=6; c(e5)=11; c(e6)=14; c(e7)=7; c(e8)=11

14. c(e1)=3; c(e2)=21; c(e3)=12; c(e4)=20; c(e5)=33; c(e6)=11; c(e7)=7; c(e8)=15

15. c(e1)=2; c(e2)=41; c(e3)=22; c(e4)=11; c(e5)=7; c(e6)=4; c(e7)=20; c(e8)=15

16. c(e1)=13; c(e2)=7; c(e3)=14; c(e4)=11; c(e5)=31; c(e6)=15; c(e7)=8; c(e8)=3

17. c(e1)=1; c(e2)=6; c(e3)=17; c(e4)=18; c(e5)=5; c(e6)=22; c(e7)=31; c(e8)=12

18. c(e1)=10; c(e2)=41; c(e3)=23; c(e4)=7; c(e5)=8; c(e6)=9; c(e7)=11; c(e8)=14

19. c(e1)=1; c(e2)=5; c(e3)=13; c(e4)=17; c(e5)=24; c(e6)=19; c(e7)=7; c(e8)=17

20. c(e1)=15; c(e2)=3; c(e3)=2; c(e4)=1; c(e5)=13; c(e6)=8; c(e7)=22; c(e8)=15

21. c(e1)=10; c(e2)=7; c(e3)=12; c(e4)=10; c(e5)=3; c(e6)=4; c(e7)=17; c(e8)=10

22. c(e1)=8; c(e2)=16; c(e3)=7; c(e4)=8; c(e5)=5; c(e6)=2; c(e7)=3; c(e8)=12

23. c(e1)=12; c(e2)=4; c(e3)=8; c(e4)=11; c(e5)=3; c(e6)=4; c(e7)=7; c(e8)=15

24. c(e1)=6; c(e2)=8; c(e3)=12; c(e4)=14; c(e5)=7; c(e6)=5; c(e7)=17; c(e8)=15

25. c(e1)=9; c(e2)=6; c(e3)=3; c(e4)=11; c(e5)=7; c(e6)=2; c(e7)=20; c(e8)=7





Дата публикования: 2015-02-22; Прочитано: 407 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...