有1< = n< = 1000个城市。我必须找到连接所有城市的路径(每个城市只能访问一次),其开始和结束于城市1号。在这条路径中,2个城市之间的最大长度必须尽可能短。
例如:
输入:
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
答案 0 :(得分:2)
这是一种近似算法,平均应该比天真的贪婪算法提供更好的结果:
n(n-1)/2
个边。您可以直接在输入图表上使用步骤4中给出的贪心算法,但预处理步骤1-3通常会大大改善您在大多数图表上的结果。
答案 1 :(得分:0)
听起来类似于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