给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离。
测试数据:
2.5 5 5.1 3 1 9 5.4 54 5.5 2.1
package pack2;
import java.util.Scanner;
import javafx.geometry.Point2D;
public class CentralCity {
public static void main(String[] args) {
centralCity();
}
public static void centralCity() {
try(Scanner input = new Scanner(System.in);) {
System.out.print("Enter the number of cities: ");
Point2D[] cities = new Point2D[input.nextInt()];
System.out.println("Enter the coordinates of the cities: ");
for (int i = 0; i < cities.length; i++)
cities[i] = new Point2D(input.nextDouble(), input.nextDouble());
Point2D centralCity = getCentralCity(cities);
System.out.println("The central city is at (" + centralCity.getX() + ", "
+ centralCity.getY() + ")");
System.out.println("The total distance to all other cities is " +
getDistance(cities, centralCity));
}
}
/**获取中心城市*/
public static Point2D getCentralCity(Point2D[] cities) {
double[][] distance = new double[cities.length][cities.length]; //距离二维数组
double sum = 0, minDistances = 0; //距离和、最短距离
Point2D centralCity = cities[0]; //当前中心城市
for (int i = 0; i < distance.length; i++)
for (int j = 0; j < distance[i].length; j++) {
//i行j列存储第i城市与第j城市的距离
distance[i][j] = cities[j].distance(cities[i]);
if(i == 0) minDistances += distance[i][j]; //获取首个最短距离
}
for (int i = 0; i < distance.length; i++) {
sum = 0;
for (int j = 0; j < distance[i].length; j++)
sum += distance[i][j]; //第i个城市与其他城市的距离之和
if(sum < minDistances) { //获取最短距离城市
minDistances = sum;
centralCity = cities[i];
}
}
return centralCity;
}
/**获取中心城市与其他城市距离*/
public static double getDistance(Point2D[] cities, Point2D centralCity) {
double distance = 0; //距离
for (int i = 0; i < cities.length; i++)
//如果城市不为中心城市,distance加上中心城市与此城市的距离
if(!centralCity.equals(cities[i]))
distance += centralCity.distance(cities[i]);
return distance;
}
}