В этом проблема:
У меня есть n точек (p1, p2, p3,.. pn), каждый из которых может подключаться к любому другому с определенной стоимостью x.
Каждая точка принадлежит одному из множества точечных типов (например, "A" "B" "C" "D"...).
Ввод метода - это путь, который я хочу выполнить, например "A-B-C-A-D-B".
Вывод - это самый короткий путь, соединяющий точки ввода типа I, например "p1-p4-p32-p83-p43-p12", где p1 - это тип A, p4 a B-type, p32 C-тип, p83 a-тип, p43 a D-тип и p12 a B-тип.
"Простое" решение состоит из вычисления ВСЕХ возможных путей, но вычислительная стоимость очень высока!
Может ли кто-нибудь найти лучший алгоритм?
Как я сказал в заголовке, я не знаю, существует ли он!
Update:
Ключевым моментом, который мешает мне использовать Dijkstra и другие подобные алгоритмы, является то, что мне нужно связать точки в соответствии с типом.
В качестве ввода у меня есть массив типов, и я должен ссылаться в этом порядке.
Это изображение Кента Фредрика (спасибо большое), который описывает начальную ситуацию (в разрешенных красных ссылках)!
alt text http://img13.imageshack.us/img13/3856/immagineaol.jpg
Пример реальной жизни:
Человек хочет побывать в церкви утром, пойти в ресторан и, наконец, посетить музей во второй половине дня.
На карте есть 6 церквей, 30 ресторанов и 4 музея.
Он хочет, чтобы расстояние церкви-отдыха-музея было минимально возможным.