题目:编写一个Point2D的用例,从命令行接受一个整数N。在单位正方形中生成N个随机点,然后计算两点之间的最近距离。
(用了两重for循环,效率确实挺差,等学完这本书之后再回过头来看看能不能想出别的高效方法。)
最短距离用加粗红线标出
import edu.princeton.cs.algs4.*;
public class TestPoint2D {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
StdDraw.setCanvasSize(800, 800);
StdDraw.setXscale(0, 100);
StdDraw.setYscale(0, 100);
StdDraw.setPenRadius(0.005);
StdDraw.enableDoubleBuffering();
Point2D[] points = new Point2D[n];
for (int i = 0; i < n; i++) {
int x = StdRandom.uniform(100);
int y = StdRandom.uniform(100);
points[i] = new Point2D(x, y);
points[i].draw();
}
Double minDis = points[0].distanceTo(points[1]);
Point2D p1 = new Point2D(0.0, 0.0);
Point2D p2 = new Point2D(0.0, 0.0);
StdDraw.setPenRadius();
StdDraw.setPenColor(StdDraw.BLUE);
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
if (points[i].distanceTo(points[j]) <= minDis) {
minDis = points[i].distanceTo(points[j]);
p1 = points[i];
p2 = points[j];
}
points[i].drawTo(points[j]);
StdDraw.show();
StdDraw.pause(100);
}
}
StdDraw.setPenColor(StdDraw.RED);
StdDraw.setPenRadius(0.01);
p1.drawTo(p2);
StdDraw.show();
StdDraw.pause(100);
}
}
网友评论