用kruskal算法绘制城市之间的道路地图

时间:2015-04-12 12:31:29

标签: java

我们有class City { int num; Double x; Double y; }; Road { Int num; City City1; City City1; Double distance}; Arraylist<Road> Rsystem=new Arraylist<Road>(); Rsystem(add(new Road(1; City1; City2);

 `Rsystem(add(new Road(n; Citym; Cityk);`

但我需要它按升序排序道路的arraylist,所以从最短的开始;

所以我想问一下,我可以将道路的构造函数应用为

 `Road {
 Int num;
 City City1;
 City City1;
 Double}  Road (int num, City City1, City City2) { this.num=num;
 this.City1=City1;this.City2=City2;this.distance=
 sqw((Pow(City1.x-  City2.x),2)+ ((Pow(City1.y-City2.y), 2);)`

或者我应该使用某种方法 - double getdistance(Road RoadN) { double d; d=((Pow(RoadN.City1.x-RoadN.City2.x), 2)+ ((Pow(RoadN.City1.y- RoadN.City2.y), 2);
Return d;}

那么我使用界面可比(只有一个比较)并且想要 排序包括这样的arraylist     1. City1.City2. 2. City2.City3. 3. City1.City3 ... 我应该包括必须的场距     1. City1.City2.500 2. City2.City3.300 3. City1.City3.550 ... 按照它进行排序,或者我可以使用getDistance(Cityn)在比较(Cityn.getDistance())时按其排序?你会建议什么? 另一个问题是我可以 当它被分类时,它可以被视为      34.City32.City34 22.city25.city27 27.city28.city29

我可以只对索引进行排序(Arraylist对象的数字字段,它们应该被视为 1.City32.City34 2.city25.city27 3.city28.city29

1 个答案:

答案 0 :(得分:0)

道路设置距离中的构造函数,变量距离

Arraylist<Road> Rsystem=new Arraylist<Road>();
Rsystem(add(new Road(1; City1; City2);

这是对的。

因此,如果您需要对道路收集(Rsystem)进行排序,则需要根据双距离进行排序。

课程道路:

class Road {
     Int num;
     City City1;
     City City1;
     private Double distance;
     public Double getDistance(){
       return distance;
     };
};

您需要自定义比较器来根据属性进行排序:

public class RoadComparator implements Comparator<Road> {

    @Override
    public int compare(Road o1, Road o2) {

        return o1.getDistance() - o2.getDistance();
    }   

}

然后通过以下方式完成排序:

Collections.sort(Rsystem, new RoadComparator());

通过这种方式,您可以按任何标准进行排序。