Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
16.12.2013
Размер:
275.97 Кб
Скачать

Кратчайший путь на графе.

Пусть дан граф G=(X,U). Каждой дуге графа поставим в соответствие положительное число l(u). Это число можно назвать длиной дуги. Тогда за длину пути μ принимается сумма длин дуг, входящих в μ:

L(μ)= Σ l(u)

u μ

Выделяются две вершины графа – a и b. Требуется на графе G найти путь кратчайшей длины из вершины a в вершину b.

Алгоритм решения задачи:

  1. Перенумеровать вершины графа G так, чтобы вершина a получила обозначение x0, а вершина b – xn (последняя по обозначению вершина).

  2. Присвоить каждой вершине xi начальную метку λi: λ0=0, λi =+∞ (i>0).

  3. Найти дугу u=uij=(xi,xj), для которой выполняется неравенство λi – λj >l(uij) (полагая, что ∞ – ∞=0). Для вершины xj заменить метку на новую, меньшую, метку λj = λj+l(uij).

  4. Процедуру, описанную в п.3 , осуществлять до тех пор, пока для каждой дуги uij не станет справедливым неравенство λj – λi ≤l(uij)

  5. Найти вершину xk F-1 *xn, для которой λn = λk+l(ukn), затем вершину xm F-1 *xk, для которой λk = λm+l(umk) и т.д. После некоторого числа шагов вершина xp совпадет с вершиной x0=a. Путь μ=(a= xp,…, xm, xk, xn =b) будет кратчайшим, и его длина равна λn.

Пусть дан граф:

x4

x5

x0

x6

x8

x7

x1

x2

x3

Решение:

λ0=0

λ 1=+∞

1

λ 2=+∞

4

5

7

λ 3=+∞

7

λ 4=+∞

1

λ 5=+∞

4

5

6

λ 6=+∞

4

4

6

λ 7=+∞

9

8

λ 8=+∞

10

Ответ: кратчайший путь из пункта 0 в пункт 8 составляет 10 через точки (x0, x1, x2, x7, x8).

Максимальный поток в сети.

Алгоритм решения:

  1. Перенумеровать вершины сети, отличные от x0 и z, произвольным образом .

  2. Построить произвольный поток φ на сети.

  3. Рассмотреть пути, соединяющие вход x0 сети с выходом z. Если поток φ полный, то перейти к п.4. В противном случае рассмотреть путь μ, соединяющий x0 с z, все дуги которого ненасыщенны. Построить новый поток

φ (u), u μ,

φ 1=

φ (u)+k, u μ,

Где k =min (c(u)- φ (u))

u μ

Повторить процесс до получения полного потока.

  1. Присвоить целочисленные метки вершинам сети и знаки «+» или «–» дугам по следующим правилам:

а) входу x0 присвоить метку 0;

б) если вершина xi получила некоторую метку, а y – еще непомеченная вершина, то y приобретает метку i, а дуга – знак «+», если φ (u)<c(u);

в) если вершина xi получила некоторую метку, а y – еще непомеченная вершина, то y приобретает метку i, а дуга – знак «–», если φ (u)>0. Остальные непомеченные вершины и дуги меток и знаков не получают;

г) повторить процесс, описанный в п.4 б, в, до тех пор, пока не прекратиться появление новых отмеченных вершин и дуг. Если в результате этого процесса вершина z не получит метки, то поток обладает наибольшей величиной, в противном случае перейти к п.5

  1. Рассмотреть последовательность отмеченных вершин λ=(z, xi, xk, xp,…, x0), каждая из которых имеет метку, равную номеру последующей вершины, и последовательность дуг μ (не обязательно путь), соединяющих последовательные вершины из λ. Построить новый поток

φ (u), u μ,

φ =

φ (u)+1, u μ и имеет знак «+»,

φ (u)-1, u μ и имеет знак «–»,

и перейти к п.4.

Задача:

x6

x5

x0

x4

x7

x1

x2

x3

Ответ:

x6

x5

x0

x4

x7

x1

x2

x3

Максимальное количество ед. – 6.

Соседние файлы в папке Курсовики по прикладной математики