Это проблема:
У меня есть 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 музея.
Он хочет, чтобы расстояние церковь-покой-музей было минимально возможным.