1.2 数据抽象 1.2.1

2020-08-10  本文已影响0人  cxfwxy

题目:编写一个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);
        
    }
    
}

上一篇下一篇

猜你喜欢

热点阅读