package bruteForce; /* * 使用蛮力法求平面中距离最近的两点 * 输入:一个n(n>=2)个点的列表P1(X1,Y1),...,Pn(Xn,Yn) * 输出:两个最近点的下标,index1和index2 * 为了避免对同一对点重复计算,只考虑i<j的那些对(Pi,Pj) */ class Points{ double X; double Y; public Points(double x,double y){ this.X = x; this.Y = y; } } public class BruteForceClosePoints { static int index1; static int index2; public static void main(String[] args) { double x;//x坐标 double y;//y坐标 Points[] p = new Points[21];//用一个Points型的对象数组来存储点 p[0] = null; for(int i=1;i<=20;i++){//随机产生20个点的坐标 x = Math.random()*20; y = Math.random()*20; Points ptemp = new Points(x,y); p[i] = ptemp; } System.out.println("随机生成的20个点为:"); for(int i=1;i<=20;i++){ System.out.print("P"+i+"("+p[i].X+","+p[i].Y+") "); if(i%5==0){ System.out.println(); } } double dmin = Double.MAX_VALUE; double d; int j; for(int i=1;i<=20;i++){ for(j=i+1;j<=20;j++){ d = Math.pow(p[i].X-p[j].X,2)+Math.pow(p[i].Y-p[j].Y,2); if(d<dmin){ dmin = d; index1 = i; index2 = j; } } } System.out.println("/n距离最近的两个点为 P"+index1+" 与 P"+index2+" ./n"+"距离为:"+Math.sqrt(dmin)); } }