path_delivery-Z3tA
Это шаблонны проект для выполнения ДЗ
Запуск Сборки и тестов через терминал
Задача: Поиск кратчайшего пути между городами (Алгоритм Дейкстры)
Цель задания
Реализовать алгоритм Дейкстры для поиска кратчайшего пути в графе городов, соединённых дорогами с определённой стоимостью проезда.
Используемые структуры данных:
для эффективного выбора следующей вершины.std::priority_queue- Контейнеры STL для представления графа (например,
).std::unordered_map
Описание задачи
Представьте, что у вас есть карта городов, где:
- Каждый город — это вершина графа.
- Дороги между городами — это рёбра графа с положительной стоимостью (весом) проезда.
Требуется:
Написать программу, которая для двух заданных городов находит путь с минимальной суммарной стоимостью и возвращает последовательность городов на этом пути.
Входные данные
Граф задаётся программно через добавление рёбер. Пример использования класса:
Требования к реализации
-
Класс
:Graph- Метод
добавляет дорогу между городамиadd_edge(from, to, cost)иfromс указанной стоимостью.to - Метод
возвращает вектор городов в порядке следования отfind_shortest_path(start, end)доstart.end - Если пути не существует, метод возвращает пустой вектор.
- Метод
-
Алгоритм Дейкстры:
- Использовать
для оптимизации выбора следующей вершины.std::priority_queue - Учитывать, что стоимость дорог всегда положительна.
- Использовать
-
Обработка ошибок:
- Если города
илиstartотсутствуют в графе, выбросить исключение (например,end).std::invalid_argument
- Если города
Примеры
Пример 1
Пример 2
Пример 3 (Нет пути)
Примечания
-
Граф ориентированный?
Нет, дороги считаются двусторонними (неориентированный граф). Если добавлено ребро, подразумевается, что движение возможно и в обратную сторону (A -> B).B -> A -
Советы по реализации:
- Для хранения расстояний используйте словарь (
).std::unordered_map<std::string, int> - Для отслеживания предыдущих вершин на пути используйте ещё один словарь.
- Приоритетная очередь должна хранить пары
.(текущая_стоимость, город)
- Для хранения расстояний используйте словарь (
Как тестировать своё решение
-
Простые случаи:
- Путь из города в самого себя.
- Граф из двух городов с одной дорогой.
-
Сложные случаи:
- Циклические маршруты.
- Несколько возможных путей с разной стоимостью.
-
Краевые случаи:
- Город без дорог.
- Запрос пути между несвязанными городами.