Java TSP 2-opt交换

时间:2014-10-16 14:23:25

标签: java

这是我在大学编程的第一年,我们刚开始使用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的数组中。这将继续这样,直到没有剩余点。然后按行距离对行数组进行排序,以便我们可以在它们之间绘制线条。我的问题是如何防止重叠?有关更好的说明,请参阅下面的链接:

I dont want this

I want this

0 个答案:

没有答案