Загрузка данных


Задание: Алгоритмы поиска кратчайшего пути во взвешенном графе
Общая часть
Студенты выполняют задание по вариантам. Каждый вариант предполагает 
реализацию одного алгоритма поиска кратчайшего пути во взвешенном графе, 
отображение графа в виде диаграммы Mermaid, описание псевдокода с 
обозначением переменных и измерение времени выполнения на заданном 
графе.
Задание 1. Алгоритм Дейкстры
Постановка задачи
Дан взвешенный ориентированный граф без рёбер с отрицательным весом. 
Требуется найти кратчайшие расстояния от заданной начальной вершины до 
всех остальных вершин графа.
Граф для выполнения задания
Вершины: A, B, C, D, E, F.
Начальная вершина: A.
Псевдокод
Обозначения переменных:
G — граф, представленный списком смежности;
s — начальная вершина;
V — множество вершин графа;
dist[v] — текущее кратчайшее расстояние от s до вершины v;
visited[v] — логический флаг, указывающий, обработана ли вершина v;
pq — очередь с приоритетом, хранящая пары (расстояние, вершина);Алгоритм Дейкстры (G, s)
1. Для каждой вершины v из V:
2.     dist[v] := бесконечность
3.     visited[v] := ложь
4. dist[s] := 0
5. pq := пустая очередь с приоритетом
6. добавить в pq пару (0, s)
7. Пока pq не пуста:
8.     (d, u) := извлечь из pq элемент с минимальным d
9.     Если visited[u] = истина:
10.продолжить
11.    visited[u] := истина
12.Для каждого ребра (u, v) с весом w в G:
13.        Если dist[u] + w < dist[v]:
14.            dist[v] := dist[u] + w
15.            добавить в pq пару (dist[v], v)
16. Вернуть массив dist
Требуется измерить
Время выполнения алгоритма на заданном графе. Замер производится с 
использованием системного таймера языка программирования. Результат 
выводится в секундах или миллисекундах с указанием единицы измерения
Задание 2. Алгоритм Беллмана — Форда
Постановка задачи
Дан взвешенный ориентированный граф, допускающий наличие рёбер с 
отрицательным весом. Требуется найти кратчайшие расстояния от заданной 
начальной вершины до всех остальных вершин графа, а также определить 
наличие цикла отрицательного веса, достижимого из начальной вершины.
Граф для выполнения задания
u — текущая извлекаемая вершина;
w — вес ребра (u, v);
d — извлечённое расстояние.Вершины: A, B, C, D, E, F.
Начальная вершина: A.
Псевдокод
Обозначения переменных:
G — граф, представленный списком рёбер;
s — начальная вершина;
V — множество вершин графа;
E — множество рёбер графа;
dist[v] — текущее кратчайшее расстояние от s до вершины v;
u — начало ребра;
v — конец ребра;
w — вес ребра (u, v);
i — счётчик итераций внешнего цикла;
n — количество вершин графа.
Алгоритм Беллмана — Форда (G, s)
1. Для каждой вершины v из V:
2.     dist[v] := бесконечность
3. dist[s] := 0
4. n := количество вершин в V
5. Для i от 1 до n - 1:
6.Для каждого ребра (u, v) с весом w в E:
7.         Если dist[u] не равно бесконечности и dist[u] + w < dist[v]:
8.             dist[v] := dist[u] + w
9. Для каждого ребра (u, v) с весом w в E:
10.    Если dist[u] не равно бесконечности и dist[u] + w < dist[v]:
11.Вернуть сообщение "Граф содержит цикл отрицательного веса"
12. Вернуть массив dist
Требуется измеритьВремя выполнения алгоритма на заданном графе. Замер производится с 
использованием системного таймера языка программирования. Результат 
выводится в секундах или миллисекундах с указанием единицы измерения.