
- •Тема 12. Графовые модели систем
- •1. Понятие графа
- •2. Экстремальное дерево
- •Алгоритм построения экстремального дерева
- •3. Матричное задание графа
- •4. Упорядочение вершин орграфа
- •Алгоритм Фалкерсона графического упорядочения вершин орграфа
- •5. Нахождение кратчайшего маршрута между вершинами графа
- •Алгоритм решения задачи о кратчайшем маршруте на графе транспортной схемы методом динамического программирования
- •Алгоритм Дейкстры нахождения кратчайшего маршрута от заданной вершины на графе транспортной схемы
Алгоритм Дейкстры нахождения кратчайшего маршрута от заданной вершины на графе транспортной схемы
Заданной вершине xi начала маршрута присвоить постоянную метку [0; –], где «0» означает, что кратчайшая длина маршрута от вершины xi до вершины начала равна Fi = 0, так как в данном случае вершина xi и есть вершина начала маршрута; знак «–» означает, что для исходной вершины исключается из рассмотрения возможность вернуться в эту вершину из любой предшествующей ей смежной вершины, так как, естественно, что входящая в кратчайший маршрут вершина транспортной схемы не может встретиться в нем более одного раза.
Определить все вершины xj, достижимые из смежной им вершины xi – последней из вершин графа, которым присвоена постоянная метка.
Установленным вершинам xj, не имеющим постоянных меток, присвоить временные метки (Fj = Fi + сij; i), где сij – вес ребра/дуги между хi и соответствующей xj, равный расстоянию между соответствующими пунктами. Если вершина xj уже имеет временную метку (Fj; k), полученную ранее от другой вершины хk, и если Fi + сij < Fj, то метка (Fj; k) заменяется на (Fj = Fi + сij; i).
Среди вершин, имеющих временные метки, выбрать вершину, в метке которой (Fs; q) значение расстояния Fs является наименьшим (если таких меток несколько, то выбирается любая их них). Положить q = i, метке данной вершины хi придать статус постоянной, и процесс определения искомого маршрута продолжить, вернувшись к пункту 2 алгоритма. Если все вершины графа получили постоянные метки, то процесс определения минимальных расстояний вершин графа до вершины начала маршрута завершен.
По заданной конечной вершине маршрута и имеющимся меткам вершин определить последовательность вершин соответствующего кратчайшего маршрута и его длину.
П
20
В
ример. Для приведенного орграфа, вес дуг которого соответствует длинам дорог (км), связывающих смежные вершины, найти по алгоритму Дейкстры кратчайший маршрут между вершинами (1) и (2):
30
2
4
80
25

30
10
А
40
5
3
1
20
20
15
6
Вершине х1 начала маршрута присваиваем постоянную метку [0; –].
Для х1 смежные достижимые вершины без постоянных меток: х2, х3. Определяем временные метки этих вершин:
Вершина |
Метка |
Статус метки |
х1 |
[0; –] |
постоянная |
х2 |
(0 + 80; 1) = (80; 1) |
временная |
х3 |
(0 + 30; 1) = (30; 1) → [30; 1] |
|
Поскольку наименьшее расстояние от начала маршрута среди временных меток имеет вершина х3, то метке этой вершины придаем статус постоянной.
Для вершины х3, последней с присвоенной постоянной меткой, смежные достижимые вершины: х4, х5, х6. Определяем временные метки этих вершин:
Вершина |
Метка |
Статус метки |
х1 |
[0; –] |
постоянная |
х2 |
(80; 1) |
временная |
х3 |
[30; 1] |
постоянная |
х4 |
(30 + 10; 3) = (40; 3) → [40; 3] |
|
х5 |
(30 + 40; 3) = (70; 3) |
временная |
х6 |
(30 + 20; 3) = (50; 3) |
временная |
Поскольку наименьшее расстояние от начала маршрута среди временных меток имеет вершина х4, то метке этой вершины придаем статус постоянной.
Для вершины х4, последней с присвоенной постоянной меткой, смежные достижимые вершины без постоянных меток: х2, х5. Определяем временные метки этих вершин:
Вершина |
Метка |
Статус метки |
х1 |
[0; –] |
постоянная |
х2 |
(80; 1), (40 + 20, 4) → (60; 4) → [60; 4] |
|
х3 |
[30; 1] |
постоянная |
х4 |
[40; 3] |
постоянная |
х5 |
(70; 3), (40 + 30; 4) = (70; 4) → [70; 3, 4] |
|
х6 |
(50; 3) → [50; 3] |
|
При заполнении этой таблицы учтено, что:
вершина х2 получает две метки (80; 1), (60; 4), оставляем метку (60; 4), в которой указано меньшее значение расстояния от начала маршрута;
вершина х5 получает две метки с одинаковым значением расстояния, оставляем обе метки;
поскольку наименьшее расстояние от начала маршрута среди временных меток имеет вершина х6, то метке этой вершины придаем статус постоянной; однако поскольку у вершины х6 нет смежных достижимых вершин с временной меткой, то рассматриваем другие оставшиеся вершины с временной меткой;
поскольку наименьшее расстояние от начала маршрута среди временных меток имеет вершина х2, то метке этой вершины придаем статус постоянной; однако поскольку у вершины х2 нет смежных достижимых вершин с временной меткой, и единственной временной меткой остается вершина х5, то придавая и ее метке статус постоянной, и поскольку все вершины получили постоянные метки, то заканчиваем процесс определения минимальных расстояний от начала маршрута.
Кратчайшие маршруты из х1 до любой другой вершины определяются от конечного пункта маршрута путем нахождения вершин согласно обратному порядку присвоения вершинам постоянных меток. Обратной последовательностью вершин от х2 в х1 является:
х2 [60; 4] → х4 [40; 3] → х3 [30; 1] → х1.
Следовательно, кратчайший маршрут из х1 в х2 определяется последовательностью вершин х1 → х3 → х4 → х2; общая длина маршрута F*min = 60 км.
Ответ: кратчайший маршрут из х1 в х2: х1 → х3 → х4 → х2; F*min = 60 км. #