* 已知平面上若干个点的坐标。
需要求出在所有的组合中,4 个点间平均距离的最小值(四舍五入,保留 2 位小数)。
比如有 4 个点:a,b,c,d,则平均距离是指:ab, ac, ad, bc, bd, cd 这 6 个距离的平均值。
每个点的坐标表示为:横坐标,纵坐标
坐标的取值范围是:1~1000
所有点的坐标记录在 in.txt 中,请读入该文件,然后计算。
注意:我们测试您的程序的时候,in.txt 可能会很大,比如包含上万条记录。
举例:
如果,in.txt 内的值为:
10,10
79
20,20
80,50
10,20
20,10
则程序应该输出:
11.38
/*
*/
package Question40_49;
import java.awt.Point;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
public class Question45ErrorDontUnderstand {
public static double exeForward(Vector<Point>vpoints,Vector<Point>tpoints,int index)
{
// for (Point point : tpoints) {
// System.out.print("["+point.x+","+point.y+"]");
// }
// System.out.println();
if(tpoints.size()==4){
double
t=tpoints.get(0).distance(tpoints.get(1))+tpoints.get(0).distance(tpoints.get(2))+tpoin
ts.get(0).distance(tpoints.get(3))
+tpoints.get(1).distance(tpoints.get(2))+tpoints.get(1).distance(tpoints.get(3))+tp
oints.get(2).distance(tpoints.get(3));
t/=6;
//System.out.println(t);
return t;
}else if (index<vpoints.size()) {
Vector<Point>vector1=new Vector<Point>(tpoints);
Vector<Point>vector2=new Vector<Point>(tpoints);
vector2.add(vpoints.get(index));
double min1=exeForward(vpoints, vector1, index+1);
double min2=exeForward(vpoints, vector2, index+1);
80
return Math.min(min1, min2);
}
return Double.MAX_VALUE;
}
public static void main(String[] args) {
try {
File file=new File("in.txt");
FileInputStream fileInputStream=new FileInputStream(file);
InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
Vector<Point>vpoints=new Vector<Point>();
String ts;
while((ts=bufferedReader.readLine())!=null){
String tss[]=ts.split("\,");
Point point=new Point(Integer.parseInt(tss[0]), Integer.parseInt(tss[1]));
vpoints.add(point);
}
Vector<Point> tpoints=new Vector<Point>();
System.out.println(String.format("%.2f", exeForward(vpoints, tpoints, 0)));
bufferedReader.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
11.38