我们说我有一组断开的道路路线,例如this example。每条路线都有Start
和Finish
点,这些点可能相同(如果路线是圆形的)。路线可以打开" (不同的开始/结束),或"关闭" (相同的开始/结束)。对于封闭路线,可以将确切的进入/退出点定义为起点/终点。
另外&#34;全球&#34; <{1}}和START
点已定义。
如何找到最低成本&#34; (距离或持续时间)访问所有路线,从&#34;全球&#34; START,将每条路线从开始传递到完成(或从完成到开始),并在&#34; global&#34;完成?
我熟悉Dijkstra算法,但我不确定在这种情况下是否可以使用它。
每两个点之间的距离和/或持续时间是已知的(可以计算)。我猜这套路线中每条路线的距离/持续时间并不重要,因为我们需要找出最低成本&#34;所有&#34;互连&#34;从一条路线的末端到下一条路线的起点所需的路线。
每条路线的方向并不重要,即。可以从开始到完成每个路线,也可以从完成到开始。
答案 0 :(得分:0)
如果我遇到了问题,那么您正在尝试互连一组(开始,结束)对,从全局START节点开始到结束于全局FINISH节点,这样这些对之间的互连具有最小距离。本地起点和终点(感兴趣的路线)之间的联系已根据您的描述给出,因此无关紧要。
正如评论中已经指出的那样,这个问题是NP难的,因此多项式时间算法无法解决(除非P = NP)。
正如上面的评论所表明的那样,如果本地(开始,结束)对数量相当小,你可以简单地尝试这些对的所有排列,并按照各自排列给出的顺序连接它们,每次使用dijkstra(或更高级的p2p算法)。不幸的是,如前所述,在你的例子中,对于13对来说这是过度杀伤。
你可以尝试的是,通过考虑(贪婪地)从最后一个终点开始的下一个X最近的起始点(可以用一次dijkstra确定)来启发式地减少排列的数量。对于X = 2和13对,这将使您降低到2 ^ 12 = 4098个排列。对于X = 3,那将是3 ^ 11 * 2 = 354294.随着考虑更多的排列,更高的X越好解决方案,具有更长计算的缺点。