热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(Java)实现查找点与点之间的最短距离

文章目录一、题目二、代码一、题目题目已经讲述查找输入点与点之间的最小距离,特别需要注意的是可能存在多个点对都符合最短距离要求,因此需要全部输出


文章目录

    • 一、题目
    • 二、代码


一、题目

题目已经讲述查找输入点与点之间的最小距离,特别需要注意的是
可能存在多个点对都符合最短距离要求,因此需要全部输出;
比如(1,1) (2,2) (3,3)
这里就有两对点都符合(1,1) (2,2) 和 (2,2) (3,3)


二、代码

注意:
(1)实现输入格式(x,y)格式输入
(2)使用 Point 类型记录每个点
(3)使用 Map 接口下的:TreeMap 和 IdentifyMap
(4)Map 接口的类型是Map>,其中Double表示距离,List 表示一对点集合:比如(3,{(1,1),(2,2)})

import java.awt.*;
import java.util.*;
import java.util.List;public class Root {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("请输入坐标的个数:");int numberOfPoints = input.nextInt();
// 创建坐标数组,存储形式(x,y)Point[] points = new Point[numberOfPoints];
// 初始化坐标数组for (int i &#61; 0; i < numberOfPoints; i&#43;&#43;) {System.out.print("输入第" &#43; (i &#43; 1) &#43; "个点的坐标(x,y)&#xff1a;");//这里设定输入格式&#xff0c;并对其进行处理String str1 &#61; input.next();String[] str2 &#61; str1.split(",");int p1 &#61; Integer.parseInt(str2[0]);int p2 &#61; Integer.parseInt(str2[1]);points[i] &#61; new Point(p1,p2);}
// Map 接口可以操作一对对象&#xff0c;每个元素都使用 key->value 的形式存储在集合中
// Map 的子类 TreeMap 可以按照 key 进行排序&#xff0c;这里我们选两点的距离作为key,但是不允许重复利用特性可以得到最小距离即第一个值key
// Map 的子类 IdentityHashMap&#xff0c;允许重复//初始化&#xff0c;距离是 double&#xff0c;对应的是一对值&#xff0c;即两个点&#xff0c;所以用 list接口也就是集合存储Map<Double, List<Point>> mapTree &#61; new TreeMap<>();Map<Double, List<Point>> mapIdentity &#61; new IdentityHashMap<>();
// 这里计算每对点的距离然后存储到 mapTree 和 mapIdentify 中for (int i&#61;0;i<numberOfPoints-1;i&#43;&#43;){for (int j&#61;i&#43;1;j<numberOfPoints;j&#43;&#43;){double distanst &#61; distance(points[i],points[j]);
// 使用 allList 存储一对点&#xff0c;即 i&#xff0c;j 两点的值&#xff0c;List<Point> allList &#61; new ArrayList<Point>();allList.add(points[i]);allList.add(points[j]);mapTree.put(distanst,allList);mapIdentity.put(distanst,allList);}}
// 在mapTee中得到排序后的第一个keydouble key &#61; mapTree.keySet().iterator().next();
// 在所有存储值中查找和key 相等的 map 集合for (Map.Entry<Double,List<Point>> me:mapIdentity.entrySet()){if (me.getKey()&#61;&#61;key){System.out.println(me.getKey() &#43; "--->" &#43; me.getValue());}}}// 计算两点之间的距离public static double distance(Point p1,Point p2){return Math.sqrt(Math.pow((p1.x-p2.x),2) &#43; Math.pow((p1.y-p2.y),2));}
}

结果如图&#xff1a;
在这里插入图片描述


推荐阅读
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • com.hazelcast.config.MapConfig.isStatisticsEnabled()方法的使用及代码示例 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了 Java 中遍历 Map 对象的几种常见方法及其应用场景。首先,通过 `entrySet` 方法结合增强型 for 循环进行遍历是最常用的方式,适用于需要同时访问键和值的场景。此外,还探讨了使用 `keySet` 和 `values` 方法分别遍历键和值的技巧,以及使用迭代器(Iterator)进行更灵活的遍历操作。每种方法都附有示例代码和具体的应用实例,帮助开发者更好地理解和选择合适的遍历策略。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
author-avatar
泱泱大国吴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有