Допустим, у меня есть этот график
- всегда полный график
- один начальный узел - также финишный узел
- взвешенные узлы и вершины
Я хочу найти путь как можно короче, но с лучшим результатом (сумма очков узлов) - другими словами, путь, который не может быть длиннее некоторой определенной константы, но дает мне наилучшее количество очков. И я хочу начинать и останавливаться в одном и том же узле и не хочу переходить по уже посещенным узлам.
Есть ли какие-нибудь алгоритмы, которые могли бы помочь мне с этой проблемой, или у вас есть идеи, как ее решить?
О, и это не домашнее задание, я просто хочу создать специальный поиск пути.
ИЗМЕНИТЬ
До сих пор мне удалось построить рабочий алгоритм, который может найти какой-то путь за несколько секунд. Но я не получаю столько баллов, сколько хотел бы - я набираю только около 85% от желаемого. А если я изменю параметры алгоритма, то время будет в часах и больше...
(u,v)
такое, чтоu
будет вашим источником, а(u,v),(v,u)
— кратчайшим путем. Вы не упомянули о каких-либо проблемах с использованием одного и того же ребра дважды. - person amit   schedule 17.03.2012v -> ... -> v
, аv
нужно посетить дважды. - person amit   schedule 17.03.2012(start,v) -> (v,start)
в вашей ситуации? - person amit   schedule 17.03.2012start -> 5p -> 2p -> start
даст мне больше очков и ту же длину. Одним из возможных решений может быть и такое:start -> 5p -> 8p -> start
(в зависимости от максимально допустимой длины). - person user219882   schedule 17.03.2012