Изменения

Перейти к: навигация, поиск

Алгоритм "поднять-в-начало"

583 байта добавлено, 12:18, 30 декабря 2012
м
Алгоритм
== Алгоритм ==
Для данного Инициализируем предпоток и высоты, с помощью операции [[Метод проталкивания предпотока#Схема алгоритма будем использовать связанный |initializePreflow]], список <tex>L</tex>, - список для хранения всех вершинграфа, кроме стока и истока. Вершины Проинициализируем указатель <tex>current</tex> каждой вершины <tex>u</tex>, чтобы он указывал на первую вершину в списке топологически отсортированы <tex>u</tex>. Пройдем по списку <tex>L</tex> разгружая вершины, начиная с первой вершины. И если операция <tex>discharge</tex> изменила высоту вершины, то перемещаем ее в соответствии с допустимой сетьюначало списка <tex>L</tex>. Передвинем указатель на следующую вершину списке <tex>L</tex>, если после разгрузки была изменена высота, то берем следующую вершину в новом списке <tex>L</tex>.
[[Метод проталкивания предпотока#Схема алгоритма|initializePreflow]] - операция для создания начального предпотока в сети.
'''relabelToFront(s, t)'''
initializePreflow(s)
u = nextVartex[u]
В приведенном псевдокоде предполагается, что для каждой вершины <tex>u</tex> уже создан список <tex>N[u]</tex>.  <tex>nextVartex[u] </tex> возвращает вершину, следующую за <tex>u</tex> в списке <tex>L</tex>. Если <tex>u</tex> - последняя вершина в списке, то <tex>nextVartex[u] = null</tex>.
== Анализ ==
338
правок

Навигация