我正在寻找一种算法(C / C ++ / Java - 无所谓),它将解决一个问题,即找到图形的2个节点(A和B)之间的最短路径。问题是路径必须访问某些其他给定节点(城市)。 可以多次访问某个城市。路径示例( A -HDCE- F - G - < strong> F - B )(其中A是来源,B是目的地,F和G是必须访问的城市)。
我认为这是旅行商问题的变体,但我无法根据我的搜索找到或编写有效的算法。
我试图从这些主题开始找到一个解决方案,但没有任何运气: https://stackoverflow.com/questions/24856875/tsp-branch-and-bound-implementation-in-c和 Variation of TSP which visits multiple cities
答案 0 :(得分:1)
将问题轻松减少到TSP将是:
(u,v)
,找到它们之间的距离d(u,v)
。这可以使用Floyd-Warshall Algorithm有效地找到所有最短路径。答案 1 :(得分:0)
我认为除了amit的答案之外,你还需要增加A或B作为端点的边缘成本足够的数量(图表的总成本+ 1可能就足够了)来确保你最终没有通过A或B的路径(而不是以A和B结尾)。
A--10--X--0--B
| | |
| 10 |
| | |
+---0--Y--0--+
上述情况会导致从A到Y到B到X的路径,除非增加A和B边的成本(减去21)。
A--31--X--21--B
| | |
| 10 |
| | |
+---21--Y--21-+
现在它从A到X到Y到B. 还要确保删除任何边(A,B)(如果存在)。