凸包问题蛮力法JAVA实现
package convexHull; import java.io.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class BruteForce { private static final String fileName = "......\data.txt";//文件路径名 private static List<Point> points; private static Set<Point> result = new HashSet<>(); private static void init() {//从文件中读取数据并解析成Point File file = new File(fileName); points = new ArrayList<>(); try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) { String string = null; while ((string = bufferedReader.readLine()) != null) { String[] strings = string.split(" "); Point point = new Point(); point.setX(Double.parseDouble(strings[0])); point.setY(Double.parseDouble(strings[1])); points.add(point); } } catch (IOException e) { e.printStackTrace(); } } private static boolean isCorrespond(double[] arrays) {//判断这些值是否全大于等于0 或者小于等于0 boolean positive = true; if (arrays[0] < 0) positive = false; for (int i = 1; i < arrays.length; i++) { if ((arrays[i] < 0 && positive) || (arrays[i] > 0 && !positive)) { return false; } } return true; } private static void solve() { int pointNum = points.size(); for (int i = 0; i < pointNum; i++) { for (int j = 0; j < pointNum; j++) { if (i == j) continue; double judge[] = new double[pointNum]; for (int k = 0; k < pointNum; k++) { Point point1 = points.get(i); Point point2 = points.get(j); double a = point2.getY() - point1.getY(); double b = point1.getX() - point2.getX(); double c = point1.getX() * point2.getY() - point1.getY() * point2.getX(); judge[k] = a * (points.get(k).getX()) + b * (points.get(k).getY()) - c; } if (isCorrespond(judge)) { result.add(points.get(i)); result.add(points.get(j)); } } } } public static void main(String[] args) { init(); solve(); for (Point point : result) { System.out.println(point.getX() + " " + point.getY()); } } }