
- •1. Алгоритмы построения кратчайших путей
- •1.1. Алгоритм Дейкстры
- •Пример плана программы, реализующей алгоритм Дейкстры для системы matlab.
- •Этап 1:
- •Этап 2:
- •1.2. Алгоритм Беллмана – Форда построения дерева кратчайших путей для сети с произвольными весами
- •Пример плана программы, реализующей алгоритм Беллмана-Форда для системы matlab.
- •Этап 1:
- •Этап 2:
- •Расчетно-графическая работа № 1
- •Построение кратчайших и максимальных путей
- •В ориентированной сети
- •Задание:
Пример плана программы, реализующей алгоритм Беллмана-Форда для системы matlab.
Предположим, что имеется ориентированная сеть, имеющая шесть узлов, и множество дуг имеют веса произвольного знака. Пусть сеть задана с помощью матрицы смежности . Необходимо найти кратчайший путь от узла до узла . Приведем один из возможных вариантов плана программы для реализации алгоритма Беллмана-Форда.
Этап 1:
Задать матрицу W;
Задать вектор меток: d=[0 inf inf inf inf inf];
Задать вспомогательную переменную: a=0;
Для всех i=0:5 выполнить
Для всех j=1:6 выполнить
Для всех k=1:6 выполнить
Проверить W(j,k)~=inf? Если верно, заменить метку:
d(k)=min(d(k),d(j)+W(j,k));
Для всех j=1:6 выполнить
Для всех k=1:6 выполнить
Проверить W(j,k)~=inf? Если верно:
Проверить d(k)>d(j)+W(j,k)? Если верно, выполнить:
a=1;
Проверить а==1? Если верно:
Вывести на экран сообщение о невозможности решения задачи;
Иначе
Длины кратчайших путей до узлов сети найдены: M=d
Перейти к этапу 2.
Этап 2:
Задать начальное состояние для вектора пути: Way=6;
Найти узел 6: u=6;
Проверить условие: u~=1? Если верно, то выполнить
Найти множество узлов, предшествующих u: P=W(:,u);
Для всех i=1:6 выполнить
Проверить P(i)~=inf? Если верно, выполнить:
Проверить d(u)=d(i)+P(i)? Если верно, выполнить
u=i;
Выполнить: Way=[u,Way];
Кратчайший путь найден; он проходит через узлы с номерами: Way
Расчетно-графическая работа № 1
Построение кратчайших и максимальных путей
В ориентированной сети
Задание:
Изобразить в виде
рисунков ориентированные сети
,
,
заданные весовыми матрицами
и
.
Построить для сети
кратчайший путь от узла
до
с
помощью алгоритма Дейкстры и максимальный
путь. Построить для сети
кратчайший путь от узла
до
с помощью алгоритма Беллмана-Форда.
Таблица 1. Варианты заданий
Номер варианта |
|
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9. |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
|
21 |
|
|
22 |
|
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
|
|
27 |
|
|
28 |
|
|
29 |
|
|
30 |
|
|