Добавил:
Купить файл с графикой можно у меня leviofanisgood666@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проект.docx
Скачиваний:
13
Добавлен:
06.04.2024
Размер:
24.77 Кб
Скачать

Задание № 2

Найдите кратчайшие пути в ориентированном графе от первой вершины до всех остальных, используя Dijkstra’s algorithm. Постройте соответствующее дерево.

РЕШЕНИЕ. Найдем кратчайший путь от вершины x1 до всех прочих. Используем предложенный алгоритм. Подход заключается в том, что вершинам графа присваиваются временные метки, которые впоследствии по определенным правилам заменяются на постоянные маркеры. Будем использовать обозначения:

- L x* (i) – постоянная метка xi;

- L x(i) – новая временная метка xi;

- L x(i) – старая временная метка xi;

- Rij – вес ребра, соединяющего xi и xj.

Новая временная метка вычисляется по формуле:

L x(xj) = min {L x R L x(i), ij + * (i)}/

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

В предпоследний столбец включаем вершину, получившую постоянную метку, в последний – ее величину, характерную для данного шага.

Шаг 1. Начальная вершина x1 имеет постоянную метку L x* (1) = 0, остальные – временную ∞.

Шаг 2. Определяем множество последователей вершины Г (x1) = {x, x, x, x, 3452}. Пересчитываем их временные метки по основной формуле. L x(3) = 85, L x(4) = 75, L x(5) = 57, L x(2) = 32. Берем вершину x2 с минимальной величиной 32. После этого присваиваем ей постоянную метку L x*(2) = 32.

Шаг 3. Определяем множество последователей вершины Г (x2) = {x, x, x, 358}. Пересчитываем временные метки по основной формуле. L x(3) = min {85, 32 + 70} = 85, L x(5) = min {57, 32 + 23} = 55 и т. д. Берем вершину x5 с минимальной величиной 55, присваиваем ей соответствующую постоянную метку (L x* (5) = 55).

Шаг 4. Определяем множество последователей вершины Г (x5) = {x, x, x, 467}. Действуем аналогичным образом, получаем следующее: L x(4) = min {75, 55 + 10} = 65 и т. д. Берем вершину x4 с минимальной временной меткой 65, присваиваем ей постоянный маркер. Речь об L x* (4) = 65.

Шаг 5. Определяем множество последователей вершины Г (x4) = {x3}. Действуем аналогично, в результате берем вершину x6 с минимальной временной меткой 66, присваиваем ей постоянную в соответствующем виде (L x* (6) = 66).

Шаг 6. Определяем множество последователей вершины Г (x6) = {x, x, 47}. Действуем аналогично. Получаем L x(7) = min {75, 66 + = 7} = 73. Берем вершину x7 с минимальной временной меткой 73, присваиваем ей постоянную (L x* (7) = 73).

Шаг 7. Определяем множество последователей вершины Г (x7) = {x8}. Получаем L x(8) = min {96, 73 + 12} = 85 и т. д. Берем x3 с минимальной временной меткой 83. Получаем L x* (3) = 83.

Шаг 8. Проделываем ту же работу в отношении Г (x3) = {x6}. Но эта вершина уже имеет постоянную метку. Поэтому берем x8, присваиваем ей L x* (8) = 85.

Кратчайшие пути найдены, их длина приведена в последних двух столбцах расчетной таблицы. Построим дерево кратчайших путей (ребра дерева обведены жирным).

(1, 2), (2, 5), (5, 4), (4, 3), (5, 6), (6, 7), (7, 8).