有一组给定的城市可以说.. A,B,C,D,E,F,G。问题是找到覆盖城市A,B,C,F的最低成本路径。路径必须覆盖城市A,B,C,F。路径可以(但不必)通过任何其他给定城市(D,E,G)。允许重复路径。路径应该从A开始和结束。 我应该如何解决类似问题?
答案 0 :(得分:3)
这是伪装Travelling Salesman Problem(TSP)的变种。
你可以看到,如果你把每个城市标记为“需要被覆盖”(我将称之为“有趣的”)。允许您多次访问节点的TSP变体仍然是NP完整的。
因此,知道您的问题的每个确切解决方案的复杂性将在有趣城市的数量中呈指数级,您可以按如下方式进行:
首先,预先计算有趣城市之间的最短路径。这可以通过从每个有趣城市或Dijkstra's algorithm运行Floyd-Warshall algorithm来完成。然后尝试访问有趣城市的顺序的每个排列;或者使用一些现有的TSP求解器或启发式算法。
所以最简单的实现是这样的:
如果你有V个城市和N个有趣的城市,这个实现的运行时间大约为O(V 3 + N!·N)