- •Курсовая работа по курсу «Дискретная математика»
- •Некоторые базисные алгоритмы обработки графов
- •Нахождение минимального пути в графе
- •Найти минимальные пути от фиксированной вершины до произвольной вершины графа, используя алгоритм Дейкстры.
- •Найти минимальные пути от фиксированной вершины до произвольной вершины графа, используя алгоритм Форда-Беллмана.
- •А л г о р и т м Форда – Беллмана
- •Найти минимальные пути между всеми парами вершин, используя алгоритм Флойда.
- •Эйлеровы цепи и циклы
- •Построить эйлеров цикл в графе. А л г о р и т м построения эйлерова цикла
- •Построить эйлерову цепь в графе.
- •Гамильтоновы цепи и циклы
- •Генерирование всех перестановок заданного множества
- •Генерирование всех перестановок заданного множества в лексикографическом порядке
- •Рекурсивный алгоритм генерирования всех перестановок заданного множества в лексикографическом порядке
- •В первой перестановке элементы идут в растущей последовательности, а в последней – в убывающей другими словами последняя перестановка является обращением первой,
- •Генерирование всех перестановок заданного множества в антилексикографическом порядке
- •Найти минимальный остов графа, используя алгоритм Краскала.
- •Найти минимальный остов графа, используя алгоритм Прима.
- •Поиск в графах
- •Алгоритм с возвратом
- •Раскраска графа
- •Алгоритм раскрашивания графов
- •Найти хроматическое число заданного графа, используя алгоритм с возвратом для нахождения независимых множеств вершин, указать, какие вершины в какой цвет окрашиваются.
- •Найти хроматический класс заданного графа, используя алгоритм с возвратом для нахождения независимых множеств вершин реберного графа, указать, какие ребра в какой цвет окрашиваются.
- •Паросочетания
- •Построения полного потока в сети
- •Максимальный поток
- •Построения максимального потока
- •Алгоритм меток для нахождения максимального потока
- •Помечивающий алгоритм Форда – Фалкерсона для нахождения максимального потока
- •Некоторые прикладные задачи
- •Задачи об источниках и потребителях
- •Решить задачу об источниках и потребителях, сведя ее к задаче построения максимального потока в транспортной сети и используя первый алгоритм построения максимального потока .
- •Двудольные графы и паросочетания
- •Нахождение наибольшего паросочетания в двудольном графе
- •Построение совершенного паросочетания в двудольном графе
- •Системы различных представителей
Помечивающий алгоритм Форда – Фалкерсона для нахождения максимального потока
Данные: транспортная сеть D, заданная матрицей пропускных способностей дуг.
Результат: максимальный поток в сети.
-
Построить произвольный поток φ на транспортной сети D (например, положить φ(u) = 0 для любой дуги u ).
-
Просмотреть пути, соединяющие вход сети v1 с выходом vn. Если поток φ полный, то перейти к п.4.
-
В противном случае рассмотреть путь μ, соединяющий вход сети v1 с выходом vn, все дуги которого не насыщены. Построить новый поток φ´:
где . Повторить этот процесс до получения
полного потока φ.
-
Присвоить целочисленные метки вершинам сети D и знаки «+» или «-» дугам по правилам:
-
входу v1 присвоить метку 0,
-
если вершина vi получила некоторую метку, а y - еще непомеченная вершина, то вершине yГvi, такой что φ((vi,y))<c((vi,y)) присвоить метку i, а дуге (vi,y) – знак «+»; вершине y Г-1vi , такой, что φ((y,vi))>0, присвоить метку i, а дуге (y,vi) – «-». Остальные непомеченные вершины и дуги метки и знаки не получают;
-
повторять процесс, описанный в предыдущем пункте до тех пор, пока не прекратится появление новых отмеченных вершин и дуг. Если в результате выполнения этого пункта вершина vn не получит метки, то поток является максимальным. В противном случае перейти к п.5.
-
Рассмотреть последовательность отмеченных вершин λ=(vn, vi1, vi2,…,v1), каждая из которых имеет метку, равную номеру последующей вершины, и последовательность μ (не обязательно путь), соединяющих последовательные вершины из λ. Построить новый поток φ´:
Перейти к пункту 4.
Пример. Рассмотрим транспортную сеть D и полный поток φ, для которого = 14:
-
(1,+)
7(8) 7(7)
0 (1,+) 5 (3,-) 6 (4,+)
1 4(5) 3 6(7) 1(1)
3(3) 10(10) 0(3) 13(15)
4 (5,+) Рис. 1.
Присвоим вершине 1 метку 0, тогда вершине 2 присвоим метку (1,+), т.к. φ((1,2))<c((1,2)). Т.к. φ((2,5))=c((2,5)), то переходим к вершине 3, которой присвоим метку (1,+), затем вершине 5 – (3,-), вершине 4 – (5,+), вершине 6 – метку (4,+). Рассмотрим последовательность вершин λ=(6,4,5,2,1), и построим новый поток, величина которого равна 15.
-
(1,+)
7(8) 7(7)
0 5 6
1 5 (5) 3 5(7) 1(1)
3(3) 10(10) 1(3) 14(15)
-
Рис. 2.
Нетрудно заметить, что улучшить данный поток нельзя.