Java 最短连接算法,心智游戏
这是一本智力游戏书上的问题。我试着这样解决它(),但没有成功。它还必须非常优化,以便在4秒内处理2000个输入坐标的输出 任何关于我的代码的建议,或者任何新的算法想法都会非常有帮助 问题: 我们有一个坐标平面,我们只使用第一个象限。我们提供了许多坐标,每个坐标都有+X和+Y值。例如0,2-5,4等。我们需要将这些坐标与矩形连接(矩形的一个角接触一个坐标,另一个角接触另一个坐标),以便所有坐标相互接触(无遗漏)。我们还必须确保用于连接2个坐标的矩形不会与任何其他坐标重叠(在边上是可以的)。考虑到目标是使用尽可能最小的总矩形面积,什么样的算法可以打印出这个问题的最佳解决方案 紫色区域是矩形,绿色点是坐标。我们可以有宽度为0的矩形,它不消耗面积 我想不出的是:找到离起始坐标最近的坐标很容易。但很难确保所有坐标都连接在一起。我总是在平面的不同区域浮动坐标。我的代码也落后于>1000点。这里有一个解决方案:Java 最短连接算法,心智游戏,java,algorithm,optimization,routes,Java,Algorithm,Optimization,Routes,这是一本智力游戏书上的问题。我试着这样解决它(),但没有成功。它还必须非常优化,以便在4秒内处理2000个输入坐标的输出 任何关于我的代码的建议,或者任何新的算法想法都会非常有帮助 问题: 我们有一个坐标平面,我们只使用第一个象限。我们提供了许多坐标,每个坐标都有+X和+Y值。例如0,2-5,4等。我们需要将这些坐标与矩形连接(矩形的一个角接触一个坐标,另一个角接触另一个坐标),以便所有坐标相互接触(无遗漏)。我们还必须确保用于连接2个坐标的矩形不会与任何其他坐标重叠(在边上是可以的)。考虑到目
O(n^2)
唯一的问题是:为什么这个算法生成的矩形不能包含另一个点?我不会在这里发布正式的证明,但绘制一些图片表明,如果有这样一个矩形,则解决方案不是最优的(证明的想法:假设内部有一个点。我们可以将该矩形拆分为两个,使该点成为它们的一个角。只有在执行此操作后,总面积才能减小).我没有看到您的代码,但我建议您尝试做的是提供一个点列表,您使用矩形相互链接,并使用最小的总面积。所以我会得到点的列表,然后为每个点找到最近的一个(两点a和b之间的距离是
d=sqrt((xa xb)²+(ya yb)²)
),然后用这两点做一个矩形。这样就可以了,唯一的问题是有时候它会打印两个完全相同的矩形,但这不是真正的问题。