06. Задача о кратчайшем пути в графе

Граф – совокупность 2х конечных множеств: вершин и ребер (или дуг).

Не ориентированный граф Ориентированный граф

Ребрам придают некоторые числовые значения, например расстояния, время, пропускная способность и т. п.

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

Цикл

В неориентированном графе цикл называют контуром.

Граф может быть задан в матричном виде

Вершины - потомки

(последующие)

Вершины предки (предшествующие)

1

2

3

4

5

1

1

1

2

1

1

1

3

1

1

4

1

В графике не должно быть

А) тупиковых событий (не выходит ни 1 стрелки, за исключением последнего события);

Б) хвостовых событий (не предшествует ни одна вершина, за исключением первого события);

В) циклов;

Г) петель;

Д) 2х стрелок

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

Каждой дуге сопоставляется целое неотрицательное число , называемое длинной этой дуги. Длина пути – сумма длин всех дуг, составляющих этот путь.

Для решения задачи о кратчайшем пути применяется алгоритм Форда, заключающейся в присвоении каждой вершине графа двойной метки , - некоторое число и в дальнейшем изменении этих меток. Рассмотрим работу алгоритма Форда на примере.

Пример.

1. Начальный шаг алгоритма.

Выделенной вершине присваивается метка и поставим рядом *, то есть и назовём такую метку Конечной, а вершину – Помеченной.

2. Общий шаг (повторяется многократно).

Рассмотрим все дуги, выходящие из отмеченной (помеченной) вершины. На первом шаге отмеченная вершина это вершина . Вычислим метки для вершин, в которые ведут дуги из : - это сумма метки и длины дуги, ведущей из в вершину . Из всех меток, которые получит вершина , выбираем наименьшую, отмечаем её * и считаем конечной. Повторяем общий шаг для определения конечных меток для всех вершин.

Рассмотрим работу Форда на примере.

Построить граф, заданный таблицей и найти кратчайший путь из в .

0,1

0,2

1,3

1,4

1,6

2,3

2,5

2,6

3,7

4,6

4,8

5,7

6,8

7,6

7,8

10

11

8

23

12

4

6

18

13

9

15

8

13

8

17

Из вершины выходят 2 дуги, ведущие в вершины и с длинами , .

Из ведут 3 дуги в , и и т. д.

Построим граф

Рис. 1

Начальный шаг (применяется однократно).

Вершине присваивается метка . Вершину считаем помеченной.

Общий шаг.

1) Вершина имеет конечную метку. Из неё выходят 2 дуги в и . Вычисляем две метки и и записываем их рядом с вершинами и . Соответственно других дуг, ведущих в и нет, поэтому эти метки конечные, отмечаем их * и изобразим две конечные (окончательные) метки на рис. 1.

2) Вершина имеет конечную метку. Из неё выходят 3 дуги, ведущие в , , и .

Вычисляем соответствующие метки , , , и , . Так как в вершину больше не входит других стрелок, то и метка для вершины окончательная.

Изобразим вычисленные три метки для , , и на рис. 2. Вершина имеет конечную метку. Из неё выходят 3 стрелки в , , и . Вычисляем метки: для вершины , для вершины и для вершины .

Рис. 2

В вершину не входят другие дуги. Из двух меток вершины выбираем наименьшую, это метка , она окончательная. Изобразим метки вершин , , и на рис.2, причем окончательные метки вершин и отмечаем *.

3) Вершина имеет конечную метку, из неё выходит единственная дуга в . Для получаем метку , т. е. , она не окончательная.

Из вершины в вершину идёт дуга, . Вычислим метку .

Вершина имеет окончательную метку.

Из двух меток вершины выбираем меньшую, это , она окончательная. Изобразим на рис. 3.

Рис. 3

4) Вершина имеет конечную метку, из неё ведут две дуги, вычисляем соответствующие метки в и в . Для вершин уже вычислены две метки. Из трех вычисленных меток , , выбираем меньшую и отмечаем её *.

Далее повторяем общий шаг пока не рассмотрим все оставшиеся вершины. При этом вершина получит окончательную метку *, вершина - *.

Двигаясь из в по помеченным меткам, получим кратчайший путь из вершины в вершину

и путь единиц.

Кратчайший путь из в равен 15, .

Также можно найти кратчайшие пути из в любую вершину , они равны окончательной метке вершины

© 2011-2024 Контрольные работы по математике и другим предметам!