/** * 蛮力求平面中距离最近的两点 * @param points 所有点的坐标点 * @return */ public static DataBean bruteForceClosestPoint(List<Pair> points) { Double minDistance = Double.MAX_VALUE; //遍历数据,获取x,y //获取map的迭代器 DataBean dbOld = new DataBean(); dbOld.setPointDistance(minDistance); for(int i = 0; i < points.size(); ++i) { Pair point1 = points.get(i); for(int j = i + 1; j < points.size(); ++j) { Pair point2 = points.get(j); //求两点距离 DataBean db = new DataBean(); db.setX1(point1.x); db.setY1(point1.y); db.setX2(point2.x); db.setY2(point2.y); db.setPointDistance(Found.getDistance(point1.x, point1.y, point2.x, point2.y)); dbOld = Found.getMinDouble(db, dbOld); } } return dbOld; } public static Double getDistance(Long x1, Long y1, Long x2, Long y2) { Double distance = Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)); return distance; } public static DataBean getMinDouble(DataBean d1, DataBean d2) { if (d1 == null || d2 == null) return null; if (d1.getPointDistance() < d2.getPointDistance()) { return d1; } else { return d2; } }
辅助类:
package cn.xf.algorithm.ch03.bean; public class DataBean { /** * 平面坐标的x坐标 */ private Long x1; /** * 同上 */ private Long y1; private Long x2; private Long y2; /** * 两点之间的距离 */ private Double pointDistance; public Double getPointDistance() { return pointDistance; } public void setPointDistance(Double pointDistance) { this.pointDistance = pointDistance; } public Long getX1() { return x1; } public void setX1(Long x1) { this.x1 = x1; } public Long getY1() { return y1; } public void setY1(Long y1) { this.y1 = y1; } public Long getX2() { return x2; } public void setX2(Long x2) { this.x2 = x2; } public Long getY2() { return y2; } public void setY2(Long y2) { this.y2 = y2; } }
package cn.xf.algorithm.ch03.bean; public class Pair { public Long x; public Long y; public Pair(Long x, Long y) { this.x = x; this.y = y; } }
测试:
public static void main(String[] args) { // List data = Arrays.asList(12,32,44,12,55,34,77,234,3567,97); // List data = new ArrayList<Integer>(); // data.addAll(Arrays.asList(12,32,44,12,55,34,77,234,3567,97)); // int k = 234; // // System.out.println(Found.sequentialSearch2(data, k)); //创建对应的map集合 List<Pair> points = new ArrayList<Pair>(); points.add(new Pair(1l, 1l)); points.add(new Pair(2l, 2l)); points.add(new Pair(3l, 4l)); points.add(new Pair(16l, 13l)); points.add(new Pair(4l, 12l)); points.add(new Pair(5l, 1l)); DataBean result = Found.bruteForceClosestPoint(points); System.out.println("X1=" + result.getX1() + ": Y1=" + result.getY1()); System.out.println("X2=" + result.getX2() + ": Y2=" + result.getY2()); System.out.println(result.getPointDistance()); }
结果: