我有一个包含1000个数据点的数据文件,其组织如下:
1000
16 11
221 25
234 112
348 102
451 456
我试图将文件读入我的程序并找到导致点总距离最短的点的排列。由于我对列表的经验很少,我甚至在阅读数据点时遇到了很多麻烦。有没有更好的方法来解决这个问题?如何通过最近邻居算法运行列表?
public static void main(String[] args) throws IOException {
File file = new File("output.txt");
Scanner scanner = new Scanner(file);
ArrayList<shortestRoute> arrayList = new ArrayList<shortestRoute>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] fields = line.split(" ");
arrayList.add(new shortestRoute(Integer.parseInt(fields[0]), Integer.parseInt(fields[1])));
}
scanner.close();
System.out.println(arrayList);
}
我知道寻找点到点距离的公式是SquareRoot [(x2-x1)^ 2-(y2-y1)^ 2]。我遇到的麻烦就是将数据点输入到贪心算法中。
答案 0 :(得分:2)
您正在使用四个空格拆分输入String。查看输入文件,我假设数字也可以用制表符分隔。而是使用四个空格,你应该寻找任何空白区域。拆分功能应该像这样改变:
String[] fields = line.split("\\s+");
答案 1 :(得分:0)
我认为这是因为第一行是文件中的点数。
因为所有数字都坚持使用Scanner。
public static void main(String[] args) throws IOException {
File file = new File("output.txt");
Scanner scanner = new Scanner(file);
ArrayList<shortestRoute> arrayList = new ArrayList<shortestRoute>();
for(int i =0, n = scanner.nextInt(); i < n; i++) {
arrayList.add(new shortestRoute(scanner.nextInt(), scanner.nextInt()));
}
scanner.close();
System.out.println(arrayList);
}