Это проблема:
У меня есть n точек (p1, p2, p3, .. pn), каждая из которых может подключаться к любой другой с определенной стоимостью x.
Каждая точка принадлежит одному из набора типов точек (например, «A», «B», «C», «D» ...).
Ввод метода - путь, по которому я хочу пойти, например, «A-B-C-A-D-B».
Выход - это кратчайший путь, соединяющий точки типа, которые я даю на входе, например, «p1-p4-p32-p83-p43-p12», где p1 - это тип A, p4 - тип B, p32. C-тип, p83 A-тип, p43 D-тип и p12 B-тип.
«Простое» решение состоит в расчете ВСЕХ возможных путей, но вычислительные затраты очень высоки!
Может кто-нибудь найти лучший алгоритм?
Как я сказал в заголовке, я не знаю, существует ли он!
Обновление:
Ключевым моментом, который мешает мне использовать Дейкстру и другие подобные алгоритмы, является то, что я должен связать точки в соответствии с типом.
В качестве входных данных у меня есть массив типов, и я должен ссылаться в этом порядке.
Это изображение Кента Фредрика (большое спасибо), которое описывает исходную ситуацию (красным разрешены ссылки)!
Пример из реальной жизни:
Человек хочет посетить церковь утром, пойти в ресторан и, наконец, посетить музей днем.
На карте 6 храмов, 30 ресторанов и 4 музея.
Он хочет, чтобы расстояние церковь-отдых-музей было минимально возможным.