这是我在大学编程的第一年,我们刚开始使用java。我已经编写了一堆代码来计算所有点的“最短”路径,但它有一个问题。有时路径会相互重叠。我一直在寻找2-opt交换,但不知道如何在我的代码中实现这一点。在帮助下会很棒。这是我计算点(城市)之间距离的代码:
public void calculate(){
Point current = null;
current = points.get(0);
Point nearestPoint = null;
ArrayList<Point> remainingPoints = new ArrayList<Point>(points);
remainingPoints.remove(current);
lines.clear();
while(!remainingPoints.isEmpty()){
double minimumDistance = -1;
for (int i = 0; i < remainingPoints.size(); i ++){
if (minimumDistance == - 1 || current.distance(remainingPoints.get(i)) < minimumDistance){
minimumDistance = current.distance(remainingPoints.get(i));
nearestPoint = remainingPoints.get(i);
}
}
lines.add(new Point[] { current, nearestPoint });
remainingPoints.remove(current);
current = nearestPoint;
}
lines.add(new Point[] { points.get(0), current });
}
它做什么?嗯基本安静。它从第一个点开始,然后找到最近的点。这将保存在一个名为lines的数组中。这将继续这样,直到没有剩余点。然后按行距离对行数组进行排序,以便我们可以在它们之间绘制线条。我的问题是如何防止重叠?有关更好的说明,请参阅下面的链接: