Java 中的最佳路径 (tsp)
The optimal path in Java (tsp)
我是 Java 的新手,正在尝试获取几个城市之间的最短路径。
Start
在某个时间点(城市)通过了 all
其他城市和 end
在 same city
正在解析来自 JSON 文件的日期:
{ "city": "City1", "latitude": 43.1641506, "longitude": 19.7600896 },
{ "city": "City2", "latitude": 60.4317477, "longitude": 10.0853171 },
{ "city": "City3", "latitude": 21.4317477, "longitude": 16.1854121 },
output
最佳路线可能是City1--> City3--> City2 --> City4 ....
我的问题和问题是如何实施城市class,有什么建议吗?
忽略问题标题,直接回答您的实际问题:
- 我建议将名称更改为
City
。 class 似乎是为了代表一个城市而不是任意一个点。
- 除非有某种原因需要通过 getter 公开经纬度,否则我建议不要这样做。最好将它们封装在它们自己的不可变 class 中,并具有与 class.
中的位置相关的任何逻辑
所以我建议如下:
public class Position {
private final double latitude;
private final double longitude;
public Position(double latitude, double longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
public double distanceTo(Position other) {
...
}
}
public class City {
private final String name;
private final Position position;
public City(String name, double latitude, double longitude) {
this.name = name;
this.position = new Position(latitude, longitude);
}
public double distanceTo(City other) {
return this.position.distanceTo(other.position);
}
}
这些都是干净简单的 classes,它们只有一个目的,可以使您的代码更易于阅读和更改。它们也是不可变的(即 none 它们的值在构造后发生变化)具有很多优点(有关详细信息,请参阅 this question 的答案)。
我是 Java 的新手,正在尝试获取几个城市之间的最短路径。
Start
在某个时间点(城市)通过了all
其他城市和end
在same city
正在解析来自 JSON 文件的日期:
{ "city": "City1", "latitude": 43.1641506, "longitude": 19.7600896 },
{ "city": "City2", "latitude": 60.4317477, "longitude": 10.0853171 },
{ "city": "City3", "latitude": 21.4317477, "longitude": 16.1854121 },
output
最佳路线可能是City1--> City3--> City2 --> City4 ....
我的问题和问题是如何实施城市class,有什么建议吗?
忽略问题标题,直接回答您的实际问题:
- 我建议将名称更改为
City
。 class 似乎是为了代表一个城市而不是任意一个点。 - 除非有某种原因需要通过 getter 公开经纬度,否则我建议不要这样做。最好将它们封装在它们自己的不可变 class 中,并具有与 class. 中的位置相关的任何逻辑
所以我建议如下:
public class Position {
private final double latitude;
private final double longitude;
public Position(double latitude, double longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
public double distanceTo(Position other) {
...
}
}
public class City {
private final String name;
private final Position position;
public City(String name, double latitude, double longitude) {
this.name = name;
this.position = new Position(latitude, longitude);
}
public double distanceTo(City other) {
return this.position.distanceTo(other.position);
}
}
这些都是干净简单的 classes,它们只有一个目的,可以使您的代码更易于阅读和更改。它们也是不可变的(即 none 它们的值在构造后发生变化)具有很多优点(有关详细信息,请参阅 this question 的答案)。