有 1<=n<=1000 个城市。我必须找到连接所有城市(每个城市只能访问一次)的路径,该路径以城市 1 开始和结束。在这条路径中,两个城市之间的最大长度必须尽可能短。
例如:
输入:
coordinates of cities
输出:
5 1 3 //longest connection is 5 and it is between cities 1 and 3
1 3 6 4 5 2 1 //path
有 1<=n<=1000 个城市。我必须找到连接所有城市(每个城市只能访问一次)的路径,该路径以城市 1 开始和结束。在这条路径中,两个城市之间的最大长度必须尽可能短。
例如:
输入:
coordinates of cities
输出:
5 1 3 //longest connection is 5 and it is between cities 1 and 3
1 3 6 4 5 2 1 //path
这是一个近似算法,平均而言应该比简单的贪心算法给出更好的结果:
n(n-1)/2
边。您可以在输入图上直接使用步骤 4 中给出的贪心算法,但预处理步骤 1-3 通常应该会大大改善您在大多数图上的结果。
听起来与TSP相似,只是您需要最小化 2 个城市之间的最大长度而不是总长度(这可能使其根本不同)。
我的想法是这样的:
create edges between each pair of cities
while (true)
next = nextLongestEdge
if (graph.canRemove(next)) // this function may be somewhat complicated,
// note that it must at the very least check that every node has at least 2 edges
graph.remove(next)
else
return any path starting and ending at 1 from the remaining edges