У меня есть полный граф с неориентированными взвешенными ребрами, и мне нужно найти наименьшую стоимость цикл по подмножеству узлов графа. В отличие от коммивояжера, любой узел можно посетить больше более одного раза и не все узлы необходимо посещать, и под стоимостью я подразумеваю, что путь должен иметь наименьшую сумму пройденных весов ребер.
Например, вот график в форме матрицы смежности:
a b c d
a 0 3 4 5
b 3 0 2 4
c 4 2 0 1
d 5 4 1 0
где вес каждого ребра используется для каждого элемента. Циклы, начинающиеся и заканчивающиеся на a
и включающие [b,d]
, будут выглядеть так:
[a,b,d,a] -> 3+4+5 = 12
[a,b,d,b,a] -> 3+4+4+3 = 14
[a,b,c,d,c,a] -> 3+2+1+1+4 = 11
Есть ли для этого оптимальный алгоритм или действительно хороший эвристический алгоритм?
[a,b,c]
, и мне нужно двигаться только отa
кb
, если ребро изa->b
имеет вес 10,a->c
имеет вес 2, аc->b
имеет вес 2, то очевидно, что любой алгоритм должен учитыватьc
, поскольку он является частью лучшего пути. Для данного графа может быть несколько лучших путей с одинаковой стоимостью. - person jzx   schedule 26.02.2013