第三题因为把取平方根算成了绝对值还看不出来来不及测试。。。有什么数据可以测试一下吗?或者老哥们能看下有什么问题吗。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] x = new int[n];
int[] y = new int[n];
for(int i = 0; i < n; i++){
x[i] = in.nextInt();
y[i] = in.nextInt();
}
int[][] distance = new int[n][n];
ArrayList<Point> list = new ArrayList<>();
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
int a = x[i]-x[j];
int b = y[i] - y[j];
double d = Math.pow(Math.pow((double)a,2) + Math.pow((double)b,2),0.5);
Point point = new Point(i,j,d );
list.add(point);
}
}
for(int i = 0; i<n;i++){
Point p = list.get(i);
}
//保存半径,初始化-1
double[] len = new double[n];
for(int i = 0; i<len.length;i++) len[i] = -1;
Collections.sort(list, (o1, o2) -> Double.compare(o1.distance,o2.distance));
//从最短看是更新他们的半径。
for(int i = 0; i < n; i++){
Point p = list.get(i);
if(len[p.i] >0) len[p.j] = p.distance-p.i;
else if(len[p.j] >0) len[p.i] = p.distance-p.j;
else {
len[p.i] = p.distance/2;
len[p.j] = p.distance/2;
}
}
for(double d:len){
System.out.print(String .format("%.3f",d)+ " ");
}
}
}
class Point{
int i;
int j;
double distance;
public Point(int i, int j ,double distance){
this.i = i;
this.j = j;
this.distance = distance;
}
}