要求:
您需要在图表上访问多个目标(无论您访问每个点的顺序或次数都无关紧要)
您可以从起点开始,访问所有目标并返回基地。
您可以多次访问每个目标。
问题:
1)我应该用什么算法来解决这个问题?
2)我建议的方法
让我们说目标= [A,B,C]
答案 0 :(得分:0)
我认为这将是一个很好的近似值:
select Cast('ddd' AS NVARCHAR(2000)) AS dd from dual
说这些是你的节点:
构建一个MST:
如果Construct a Minimum Spanning Tree.
Do a pre-order traversal taking your source as the root.
Remove edges which are not necessary (removing which does not disconnect your source and targets).
是您的来源:以root身份执行预订定遍历。
移除不会断开目标和来源的边缘。 (使用union-find很容易)
答案 1 :(得分:0)
您走在正确的轨道上,但您的问题会缩小为旅行商问题(TSP)。
如前所述,使用Dijkstra,您可以使用单个边替换不包含任何目标节点的目标节点之间的所有路径。结果是一个只有目标节点的图表......这样你就得到了TSP。
至于评论中的加权有向边缘事物,我认为只要边缘成本是非负的,Dijkstra就完全没问题了。