Разработать программу для вычисления кратчайшего пути для почтальона.
Почтальон выходит из почтового отделения, объезжает всех адресатов один раз для вручения посылки и возвращается в почтовое отделение.
Необходимо найти кратчайший маршрут для почтальона.
- Почтовое отделение – (0, 2)
- Ул. Грибоедова, 104/25 – (2, 5)
- Ул. Бейкер стрит, 221б – (5, 2)
- Ул. Большая Садовая, 302-бис – (6, 6)
- Вечнозелёная Аллея, 742 – (8, 3)
Общее количество всех возможных путей проезда вычисляется по формуле (n - 1)!, где n – количество точек (адресатов).
Расчёт количества возможных маршрутов объезда адресатов для данной карты: (5 - 1)! = 4! = 24 (маршрута). Необходимо найти кратчайший маршрут и вывести последовательность точек, которые его составляют.
Для поиска такого маршрута необходимо вычислять расстояния между точками, составляющих маршрут. Это позволит найти общую длину маршрута. Путем перебора длин всех возможных маршрутов найти самый короткий из них.
Расстояние между двумя точками на плоскости вычисляется по формуле:
Где x1 и y1 – координаты первой точки, x2 и y2 – координаты второй точки.
Вычисление расстояния между двумя точками на плоскости:
point_1 = (0, 2) # координаты первой точки
point_2 = (2, 5) # координаты второй точки
# подстановка значений в формулу
((point_2[0] - point_1[0]) ** 2 + (point_2[1] - point_1[1]) ** 2) ** 0.5
# результат – 3.605551275463989
Результат выполнения программы должен содержать последовательность точек, которые составляют самый короткий из маршрутов с выводом промежуточных расстояний для каждой точки (от начала до текущей точки) и общей длины маршрута.
Результат работы программы может быть оформлен следующим образом:
(0, 1) -> (1, 4)[3.1622776601683795] -> (4, 1)[7.404918347287664] -> (5, 5)[11.528023972905324] -> (7, 2)[15.133575248369313] -> (0, 1)[22.204643060234787] = 22.204643060234787
Координаты точек, следующие друг за другом, показывают найденный кратчайший путь с указанием промежуточной длины пути у каждой следующей точки. Полная продолжительность всего маршрута указана после символа равенства.