我有一个complete graph带有无向的加权边,需要通过图节点的子集找到最低成本cycle。与Travelling Salesman不同,任何节点都可以多次访问 和并非所有节点都需要访问,并且按成本I意味着路径应该具有遍历边缘权重的最小总和。
例如,以下是adjacency matrix形式的图表:
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
是否有最佳算法,或者是一个非常好的启发式算法?
答案 0 :(得分:3)
在a
开始和结束并且包括[b,d]
的周期仅表示周期必须访问节点a,b,d。 [a,b,d,a] = [b,d,a,b]
(周期右)。你的问题叫做k-TSP。见here。但这很难实现,可能不是你想要的。
所以我会给你一个更简单的方法。首先构造仅通过这些节点的最短循环。然后用两个节点之间的最小路径替换每条边。我认为这是合理的,我忽略了最优性。以下是步骤:
C
(不使用其他节点),添加额外的边缘以进行循环。uv
中的每个边C
,请执行:w
和u
之间找到最短路径v
(图中不应为负循环)。uv
替换为w
。