
- •Тема 12. Графовые модели систем
- •1. Понятие графа
- •2. Экстремальное дерево
- •Алгоритм построения экстремального дерева
- •3. Матричное задание графа
- •4. Упорядочение вершин орграфа
- •Алгоритм Фалкерсона графического упорядочения вершин орграфа
- •5. Нахождение кратчайшего маршрута между вершинами графа
- •Алгоритм решения задачи о кратчайшем маршруте на графе транспортной схемы методом динамического программирования
- •Алгоритм Дейкстры нахождения кратчайшего маршрута от заданной вершины на графе транспортной схемы
5. Нахождение кратчайшего маршрута между вершинами графа
Транспортная схема с фиксированным направлением движения по ней слева направо, для которой кратчайший маршрут был найден методом динамического программирования, представляет связный орграф без контуров и петель. Для такой транспортной схемы метод динамического программирования может быть реализован непосредственно на орграфе.
Алгоритм решения задачи о кратчайшем маршруте на графе транспортной схемы методом динамического программирования
Представить заданную транспортную схему возможного движения между пунктами в направлении от пункта А к пункту В как орграф: вершины графа – населенные пункты на транспортной схеме, дуги – дороги между этими пунктами.
Выполнить упорядочение вершин орграфа согласно алгоритму Фалкерсона, отметить вершины, соответствующие пунктам А и В.
Обозначить вершины орграфа кружками, разделенными пополам горизонтальными диаметрами. В верхнем полукруге записать номер вершины (номер пункта на транспортной схеме), в нижнем полукруге в процессе решения задачи предстоит проставлять минимальную длину маршрута между соответствующим пунктом и начальным пунктом А.
Указать над дугами орграфа их вес, равный расстоянию между соответствующими пунктами транспортной схемы.
Записать в нижнем полукруге пункта А число 0.
Перейти к следующей группе вершин упорядоченного орграфа. В каждой вершине, смежной вершине А, записать расстояние до пункта А и пометить соответствующие дуги, входящие в эти вершины, как возможные составляющие части искомого кратчайшего маршрута.
Для каждой вершины хj следующей группы упорядоченного орграфа определить длину кратчайшего маршрута до пункта А: найти сумму числа в нижнем полукруге предшествующей для хj смежной вершине и веса дуги, соединяющей эту вершину с хj; если таких вершин несколько найти минимальное значение этих сумм и вписать это значение в нижний полукруг вершины хj, пометить дугу, определившую полученное минимальное значение.
Если вершина хj соответствует конечному пункту маршрута В, то закончить заполнение вершин орграфа, иначе вернуться к п.7 алгоритма.
От вершины орграфа, соответствующей пункту В, вернуться по отмеченным дугам к пункту А; путь в орграфе по этим дугам от А к В и будет искомым кратчайшим маршрутом между этими пунктами, длина которого записана в нижнем полукруге вершины пункта В.
Записать ответ: указать совокупную последовательность пунктов на кратчайшем маршруте от А до В и длину этого маршрута F*min.
Пример. По приведенной совокупности населенных пунктов и протяженности (в километрах) связывающих их дорог, по которым можно доехать из пункта А (вершина 1) до пункта В (вершина 8) определить кратчайший маршрут между этими пунктами.
П
осле
упорядочения вершин орграфа, определения
минимальной длины пути от этих вершин
до пункта А
в процессе следования от группы к группе
вершин упорядоченного орграфа слева
направо и отметки дуг, участвующих в
формировании соответствующих минимальных
путей, получаем следующий орграф:
Приведем примеры расчета минимальной длины пути от вершин орграфа до пункта А.
Так, для вершины (3) смежными предшествующими вершинами являются (1), (2), (4). Следовательно, минимальная длина пути между вершинами (1) и (3) равна min{0 + 14; 10 + 3; 9 + 6} = min{14; 13; 15}= 13.
Для вершины (8) смежными предшествующими вершинами являются (3), (5), (4), (7), (6). Следовательно, минимальная длина пути между вершинами (1) и (8) равна min{13 + 10; 15 + 8; 9 + 16; 14 + 8; 8 + 15} = min{23; 23; 25; 22; 23} = 22.
Т.о., кратчайший маршрут между пунктами А и В имеет длину 22 км. Следуя справа налево по орграфу, получаем последовательность отмеченных дуг, составляющих этот маршрут: (8) → (7) → (4) → (1), или в обратном порядке от А до В: (1) → (4) → (7) → (8).
Ответ: длина кратчайшего маршрута от пункта А до пункта В равна 22 км, последовательность пунктов на этом маршруте А → (4) → (7) → В. #
Более общим алгоритмом определения кратчайшего маршрута является алгоритм Дейкстры. Этот алгоритм не требует предварительного упорядочения вершин и применим как к неориентированным графам, так и орграфам, в которых могут быть циклы/контуры.