聚餐地计算(华为od机考题)

一、题目

1.原题

小华和小为是很要好的朋友,他们约定周末一起吃饭。
通过手机交流,
他们在地图上选择了多个聚餐地点
(由于自然地形等原因,部分聚餐地点不可达),
求小华和小为都能到达的聚餐地点有多少个?

2.题目理解

考点:[广搜, 矩阵, 并查集]

二、思路与代码过程

1.思路

输入:

地图map(包含餐厅1,可移动空间0,障碍物-1);

小华和小为出发位置。

计算过程:

使用队列初始存储出发位置,对方向数组进行遍历,(BFS),得到可以抵达的餐厅的位置数组表,将小华和小为的进行相同值筛选后得到都可以抵达的餐厅位置数组,对数组长度进行输出即可。

2.代码过程

①main函数

public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入地图长宽:");int m = sc.nextInt();int n = sc.nextInt();System.out.println("请输入地图(0:正常通行;-1:障碍;1:餐厅):");int[][] map = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {map[i][j] = sc.nextInt();}}System.out.println("请输入小华位置:");int[] posH = new int[2];posH[0] = sc.nextInt();posH[1] = sc.nextInt();System.out.println("请输入小为位置:");int[] posW = new int[2];posW[0] = sc.nextInt();posW[1] = sc.nextInt();ArrayList<int[]>HCr = CountArrival(posH,map);ArrayList<int[]>WCr = CountArrival(posW,map);ArrayList<int[]>HWCR = CalBothCan(HCr,WCr);System.out.println("小华和小为都能到达的聚餐地点有:"+HWCR.size()+"个。");}

②CalBothCan

private static ArrayList<int[]> CalBothCan(ArrayList<int[]> hcr, ArrayList<int[]> wcr) {ArrayList<int[]> BR = new ArrayList<>();while (BR.size() < Math.min(hcr.size(), wcr.size())) {for (int[] i : hcr) {for (int[] j : wcr) {if (Arrays.equals(i, j)) {BR.add(i);}}}}return BR;}

③方向数组

static int[][] DIRECTION ={{0,1},{1,0},{0,-1},{-1,0}};//方向数组

④CountArrival

private static ArrayList<int[]> CountArrival(int[] pos, int[][] map) {boolean[][] visited = new boolean[map.length][map[0].length];//抵达标记防止重复Queue<int[]> Q = new LinkedList<>();Q.add(pos);visited[pos[0]][pos[1]] = true;ArrayList<int[]> CR = new ArrayList<>();while(!Q.isEmpty()) {int[] cur = Q.poll();visited[cur[0]][cur[1]] = true;for (int[] direction : DIRECTION) {int x = cur[0] + direction[0];int y = cur[1] + direction[1];if (x >= 0 && y >= 0 && x < map.length && y < map[0].length&&!visited[x][y]) {//在边界内if (map[x][y] == 0) {Q.add(new int[]{x,y});visited[x][y] = true;}if (map[x][y] == 1) {Q.add(new int[]{x,y});CR.add(new int[]{x,y});visited[x][y] = true;}if (map[x][y] == -1) {continue;}}}}return CR;}

三、运行结果

1.运行截图

2.完整代码

import java.util.*;public class test39 {public static void main(String[] args) {///*Scanner sc = new Scanner(System.in);System.out.println("请输入地图长宽:");int m = sc.nextInt();int n = sc.nextInt();System.out.println("请输入地图(0:正常通行;-1:障碍;1:餐厅):");int[][] map = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {map[i][j] = sc.nextInt();}}//System.out.println(Arrays.deepToString(map));System.out.println("请输入小华位置:");int[] posH = new int[2];posH[0] = sc.nextInt();posH[1] = sc.nextInt();System.out.println("请输入小为位置:");int[] posW = new int[2];posW[0] = sc.nextInt();posW[1] = sc.nextInt();//*//*int[][] map = {{0,-1,-1,1},{0,1,-1,0},{-1,0,1,0},{0,-1,0,0}};int[] posH = {0,0};int[] posW = {3,3};*/ArrayList<int[]>HCr = CountArrival(posH,map);ArrayList<int[]>WCr = CountArrival(posW,map);ArrayList<int[]>HWCR = CalBothCan(HCr,WCr);System.out.println("小华和小为都能到达的聚餐地点有:"+HWCR.size()+"个。");}private static ArrayList<int[]> CalBothCan(ArrayList<int[]> hcr, ArrayList<int[]> wcr) {ArrayList<int[]> BR = new ArrayList<>();while (BR.size() < Math.min(hcr.size(), wcr.size())) {for (int[] i : hcr) {for (int[] j : wcr) {if (Arrays.equals(i, j)) {BR.add(i);}}}}return BR;}static int[][] DIRECTION ={{0,1},{1,0},{0,-1},{-1,0}};//方向数组private static ArrayList<int[]> CountArrival(int[] pos, int[][] map) {boolean[][] visited = new boolean[map.length][map[0].length];//抵达标记防止重复Queue<int[]> Q = new LinkedList<>();Q.add(pos);visited[pos[0]][pos[1]] = true;ArrayList<int[]> CR = new ArrayList<>();while(!Q.isEmpty()) {int[] cur = Q.poll();visited[cur[0]][cur[1]] = true;for (int[] direction : DIRECTION) {int x = cur[0] + direction[0];int y = cur[1] + direction[1];if (x >= 0 && y >= 0 && x < map.length && y < map[0].length&&!visited[x][y]) {//在边界内if (map[x][y] == 0) {Q.add(new int[]{x,y});visited[x][y] = true;}if (map[x][y] == 1) {Q.add(new int[]{x,y});CR.add(new int[]{x,y});visited[x][y] = true;}if (map[x][y] == -1) {continue;}}}}/*System.out.println("\n可抵达餐厅有:");for (int[] element : CR) {System.out.print(Arrays.toString(element));}System.out.println();*/return CR;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/411508.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海洋生物材料及其衍生物在3D生物打印中的用处

大家好&#xff0c;今天我们来聊一聊 海洋衍生生物材料在3D 生物打印的引言——《Recent Developments in Bio-Ink Formulations Using Marine-Derived Biomaterials for Three-Dimensional (3D) Bioprinting》。3D 生物打印具有巨大的应用潜力&#xff0c;在生物医学、制药等领…

同声传译是什么?5款同声传译器让国际旅行沟通无障碍

当我踏上异国他乡的旅途&#xff0c;语言的障碍总是让人既兴奋又忐忑。幸运的是&#xff0c;有了同声传译好用的软件&#xff0c;我不再担心与当地人的交流。 只需轻触屏幕&#xff0c;我的话语就能被即时翻译成他们的语言&#xff0c;而他们的回应也能迅速转化为我熟悉的母语…

《前端攻城狮 · Snowflake 雪花算法》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

贾湖刻符——汉字起源的重要线索

关注我们 - 数字罗塞塔计划 - 汉字是世界上唯一沿用至今的古老文字系统&#xff0c;其演变历程承载着中华文明的发展和赓续。那么汉字究竟源自何时&#xff1f;是古代神话传说的“昔者仓颉作书&#xff0c;而天雨粟&#xff0c;鬼夜哭”&#xff1b;还是由华夏先民创制的刻划符…

LCD模组驱动开发

Linux 5.15 内核适配 驱动勾选 由于使用的是 SPI0&#xff0c;所以 TinyVision 的 LCD 模块并不支持使用MIPI-DBI进行驱动&#xff0c;这里我们使用普通的SPI模拟时序。 勾选 SPI 驱动 这里我们使用 SPI-NG 驱动&#xff0c;勾选 <*> SPI NG Driver Support for Allw…

图解计算机网络:一条 HTTP 请求的网络拓扑之旅

引言 常见的网络拓扑结构如下图所示&#xff1a; 在此拓扑中&#xff0c;终端设备通过 WiFi 连接到路由器&#xff0c;路由器再连接到光猫&#xff08;或终端设备通过移动网络 4G/5G 连接到基站&#xff09;&#xff0c;之后 ISP 网络服务提供商接管网络通信&#xff0c;将请求…

Sweet Home 3D:Mac 与 Win 平台的强大 3D 室内装潢设计软件

在当今数字化的时代&#xff0c;一款优秀的室内装潢设计软件可以让你的家居梦想轻松变为现实。Sweet Home 3D for Mac/win 便是这样一款令人惊艳的 3D 室内装潢设计软件&#xff0c;它以其强大的功能和便捷的操作&#xff0c;成为了众多设计师和家居爱好者的首选。 一、功能强…

[数据集][目标检测]考场行为作弊检测数据集VOC+YOLO格式4413张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4413 标注数量(xml文件个数)&#xff1a;4413 标注数量(txt文件个数)&#xff1a;4413 标注…

是否应该使用WordPress自动更新的功能

开源程序例如WordPress&#xff0c;使许多人能够轻松创建自己的网站。然而&#xff0c;却存在一个棘手的问题是黑客攻击。开源的性质及其安全透明性让黑客、机器人和脚本小子提供了不断攻击的机会。防止WordPress网站被黑的首要方法是保持WordPress版本、主题和插件的更新。对于…

代码随想录算法训练营第30天 | 452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间

代码随想录算法训练营第30天 | 452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间 文章目录 代码随想录算法训练营第30天 | 452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间452.用最少数量的箭引爆气球解题思路代码实现题目总结 435.无重叠区间解题…

硬盘数据如何恢复?别慌!5 大策略帮您恢复硬盘数据!

在日常生活和工作里&#xff0c;硬盘数据丢失着实让人头疼。不管是不小心误删重要文件&#xff0c;还是对硬盘进行格式化操作、重新安装电脑系统&#xff0c;又或是遭受病毒恶意攻击&#xff0c;都可能让珍贵的数据瞬间没了踪影。 不过别慌&#xff0c;下面为您介绍 5 种应对策…

手动安装Git,手动在右击菜单注册git运行程序

当我们有git的zip压缩包后&#xff0c;只将压缩包解压也是可以用的&#xff0c;但是每次使用时还得去git的安装包下启动git项目&#xff0c;这样就很麻烦。一般情况下都是右击就有git运行程序的选项&#xff0c;直接点击就好&#xff0c;这时用.exe文件安装就没问题&#xff0c…

SQL慢查询优化方式

目录 一、SQL语句优化 1. 避免使用 SELECT * &#xff0c;而是具体字段 2.避免使用 % 开头的 LIKE 的查询 3.避免使用子查询&#xff0c;使用JOIN 4.使用EXISTS代替IN 5.使用LIMIT 1优化查询 6.使用批量插入、优化INSERT操作 7.其他方式 二、SQL索引优化 1.在查询条件…

商圣集团:数字创新,引领智慧生活新篇章

在全球化经济不断演进的大潮中&#xff0c;数字经济已成为推动社会进步的关键引擎&#xff0c;重塑着我们的生产与生活模式。商圣集团&#xff0c;以服务社会、创新驱动为核心价值观&#xff0c;致力于利用数字化技术&#xff0c;为个人和企业带来高效、便捷的服务体验&#xf…

自省式RAG与LangGraph:探索高效实践之路

研究背景 由于大多数大型语言模型&#xff08;LLMs&#xff09;通常只针对大量公共数据进行周期性训练&#xff0c;它们往往缺少最新信息或不能接触到无法用于训练的私有数据。检索增强生成&#xff08;RAG&#xff09;模式恰好解决了这个问题&#xff0c;它通过将大型语言模型…

前端速通面经八股系列(五)—— Vue(上)

Vue系列目录 一、Vue 基础1. Vue的基本原理2. 双向数据绑定的原理3. 使用 Object.defineProperty() 来进行数据劫持有什么缺点&#xff1f;4. MVVM、MVC、MVP的区别5. Computed 和 Watch 的区别6. Computed 和 Methods 的区别7. slot是什么&#xff1f;有什么作用&#xff1f;原…

计算机视觉编程 1(图片处理)

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值&#xff0c;用来描述图像中各个像素的明暗程度。在计算机视觉中&#xff0c;灰度可以通过以下方式来计算&#xff1a; 1. 平均值法&#xff1a;将图像中每…

E:Failed to fetch的解决方案——Linux换源方法

错误描述 在sudo apt-get时报错 E: Failed to fetch https://mirrors.bupt.edu.cn/ubuntu/pool/universe/libc/libcanberra/libcanberra-gtk0_0.30-7ubuntu1_amd64.deb 403 Forbidden 这种错通常是该源在当前网络下无法连接导致&#xff08;如笔者从教育网换回家里的网&#x…

Kubernetes存储Volume

数据是一个企业的发展核心,他涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分&#xff0c;在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 一、Volume的概念 对于大多数的项目而言&#xff0c;数据文件的存储是非常常见的需求&#xff0c;比如存储用…

大模型低显存推理优化-Offload技术

近两年大模型火出天际&#xff1b;同时&#xff0c;也诞生了大量针对大模型的优化技术。本系列将针对一些常见大模型优化技术进行讲解。 [大模型推理优化技术-KV Cache][大模型推理服务调度优化技术-Continuous batching]大模型显存优化技术-PagedAttention大模型低显存推理优…