枚举法找出距离最近的两个点
来源:互联网 发布:qt5.7串口编程实例 编辑:程序博客网 时间:2024/05/16 00:57
在编程之美和HDU有这么一道题目:
给定平面上N个点的坐标,找出距离最近的两个点。如:有这些个点对:
(-1, 3)
(-1, -1)
(1, 1)
(2, 0.5)
(2, -1)
(3, 3)
(4, 2)
(4, -0.5)
则最近的两点应该为:(1,1)和(2, 0.5)
解决的方有多种,网上参考例子最多的是分而治之的方法,今天我用最简单粗暴的枚举法来解决这道题。一来是为了最近找工作笔试练手,二来是了给亲爱的伸手党童鞋一个参考。
思路:
把每个点的横纵坐标放在N行2列的二维数组里边。每一行的第0列为点的横坐标,第1列为点的纵坐标。设立一个变量minDistance记录距离最短距离值,p1记录最短距离的起始点,p2记录最短距离的终点。从第0列开始,遍历第i个点和j个点之间的距离,如果这亮点的距离小于我们的标杆minDistance,则更新minDistance的值,并记录下i和j的下标到p1和p2中。
import java.util.Scanner;/** * 寻找最近点对 * @author shizongger * @date 2017-02-28 */public class Main { public static void main(String[] args) { System.out.print("请输入点对个数: "); Scanner sc = new Scanner(System.in); int number = sc.nextInt(); double[][] points = new double[number][number]; for(int i = 0; i < number; i++) { //循环输入点对坐标 System.out.print("第" + (i+1) + "个点的横纵坐标:"); points[i][0] = sc.nextDouble(); points[i][1] = sc.nextDouble(); } int p1 = 0; //p1记录起点,假设起点就是二维数组的第一组元素 int p2 = 1; //p2记录终点,假设终点就是二维数组的第二组元素 double minDistance = distance(points[p1][0], points[p1][1], points[p2][0], points[p2][1]); for(int i = 0; i < points.length; i++) { for(int j = i+1; j < points[i].length; j++) { double dist = distance(points[i][0], points[i][1], points[j][0], points[j][1]); //如果dis的值小于minDistance的值,则更新p1和p2的位置 if(dist < minDistance) { minDistance = dist; p1 = i; p2 = j; } } } System.out.println("平面内最短距离的两点是:(" + points[p1][0] + "," + points[p1][1] + ")和(" + points[p2][0] + "," + points[p2][1] + ")"); } /** * 计算两点之间的距离 * @param x1 第一个点的横坐标 * @param y1 第一个点的纵坐标 * @param x2 第二个点的横坐标 * @param y2 第二个点的纵坐标 * @return 两点之间的距离 */ public static double distance(double x1, double y1, double x2, double y2) { return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); }}
结果输入如图所示:
0 0
- 枚举法找出距离最近的两个点
- 找出平面上距离最近的两个点
- 找出距离最近的三个点
- 平面内距离最近的两个点-- 分治法
- HDU1007(求最近两个点之间的距离)
- 分治,在平面上找距离最近的两个点
- 找出附近距离自己最近的店家
- hdu 1007 Quoit Design 找最近的两个点的距离
- 2.2.5 距离最近的点对
- 计算点到线段的最近距离
- 判断距离自己最近的点
- 最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中, 距离最近的两个点间的最小距离。请补全缺失的代码。
- 最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中,距离最近的两个点间的最小距离。
- 最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中,距离最近的两个点间的最小距离
- hust1346(两个线段的最近距离和最小距离)
- 平面最近点距离问题(分治法)
- ACM 169 素数 (找出距离某数最近的素数)
- 通过两个点的经纬度计算距离
- 编程题训练1
- 面试ap公司试题
- (lodash_gcy)union—将给定的几个数组的唯一元素组合成一个数组
- ServerSocket 与 Socket的区别
- 配置java运行环境报错:could not open 'E:\java\jre7\lib\amd64\jvm.cfg'解决
- 枚举法找出距离最近的两个点
- Integer to Roman
- 矩阵快速幂ZOJ
- ASP.NET MVC一次删除多笔记录 V2.0
- MongoDB文档翻译-聚集管道
- 【解题报告】AIM Tech Round 3 (Div. 2)(先占个位置,里面暂时什么也没有)
- MATLAB中floor、round、ceil、fix区别
- Oracle忘记密码增麽办???
- iOS逆向工程三:苹果私有API的获取