【华为OD题库-042】战场索敌-java

题目

有一个大小是N * M的战场地图,被墙壁’#‘分隔成大小不同的区域,上下左右四个方向相邻的空地∵,属于同一个区域,只有空地上可能存在敌人’E’,请求出地图上总共有多少区域里的敌人数小于K。
输入描述
第一行输入为 N M K;
N表示地图的行数,M表示地图的列数,K表示目标敌人数量N,M<=100
之后为一个N * M大小的字符数组
输出描述
敌人数小于K的区域数量
示例1:
输入:
3 5 2
…#EE
E.#E.
###…
输出
1
说明
地图被墙壁分为两个区域,左边区域有1个敌人,右边区域有3个敌人,符合条件的区域数量是1

思路

递归遍历解决

  1. 如果某个位置不为‘#’,那么从此位置递归遍历,找上下左右不为‘#’的区域,计算其中的E的数量,并且将该区域标记为已访问
  2. 下次遍历时,如果字符不为#且该位置未被遍历过,说明是一个新区域
  3. 最后计算E数量小于K的区域个数

如果改变输入,可以将已访问过的区域直接标记为#
如果不改变输入,可以使用一个新的visited标记是否访问过该区域

题解

方案一:把已访问过的区域标记为#,改变了原有输入

package hwod;import java.util.Arrays;
import java.util.Scanner;public class BattlefieldFindEnemy {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int n = nums[0], m = nums[1], k = nums[2];char[][] arrs = new char[n][m];for (int i = 0; i < n; i++) {arrs[i] = sc.nextLine().toCharArray();}System.out.println(battleFieldFindEnemy(arrs, k));}private static int battleFieldFindEnemy(char[][] arrs, int k) {int ans = 0;for (int i = 0; i < arrs.length; i++) {for (int j = 0; j < arrs[0].length; j++) {if (arrs[i][j] != '#' && recur(arrs, i, j) < k) {ans++;}}}return ans;}private static int recur(char[][] arrs, int i, int j) {int res = 0;if (i < 0 || j < 0 || i >= arrs.length || j >= arrs[0].length || arrs[i][j] == '#') return res;if (arrs[i][j] == 'E') res++;arrs[i][j] = '#';return res + recur(arrs, i + 1, j) + recur(arrs, i - 1, j) + recur(arrs, i, j + 1) + recur(arrs, i, j - 1);}
}

方案二:使用vistied数组标记某个位置是否被访问过,不改变原来的arrs

package hwod;import java.util.Arrays;
import java.util.Scanner;public class BattlefieldFindEnemy {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int n = nums[0], m = nums[1], k = nums[2];char[][] arrs = new char[n][m];for (int i = 0; i < n; i++) {arrs[i] = sc.nextLine().toCharArray();}System.out.println(battleFieldFindEnemy2(arrs, k));}private static int[][] visted;private static int battleFieldFindEnemy2(char[][] arrs, int k) {int ans = 0;visted = new int[arrs.length][arrs[0].length];for (int i = 0; i < arrs.length; i++) {for (int j = 0; j < arrs[0].length; j++) {if (visted[i][j] == 0 && arrs[i][j] != '#' && recur2(arrs, i, j) < k) {ans++;}}}return ans;}private static int recur2(char[][] arrs, int i, int j) {int res = 0;if (i < 0 || j < 0 || i >= arrs.length || j >= arrs[0].length || visted[i][j] == 1 || arrs[i][j] == '#')return res;if (arrs[i][j] == 'E') res++;visted[i][j] = 1;return res + recur(arrs, i + 1, j) + recur(arrs, i - 1, j) + recur(arrs, i, j + 1) + recur(arrs, i, j - 1);}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

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

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

相关文章

WT588FM01高性能录音语音芯片模块IC:远距离录音,卓越音质,多功能一体

在音频技术不断进步的今天&#xff0c;一款高性能的录音模块对于很多产品来说都是不可或缺的。唯创知音的WT588FM01就是这样一款令人瞩目的高性能录音语音芯片模块。它拥有远距离录音能力&#xff0c;出色的音质&#xff0c;以及直接推动8ohm/0.5W喇叭输出的功能&#xff0c;为…

【传送点】上千漏洞复现复现集合 exp poc 持续更新

一 简介 二 传送 【漏洞复现】OpenTSDB 2.4.0 命令注入(CVE-2020-35476)漏洞复现 【漏洞复现】熊海cms 存在sql注入 附poc 【漏洞复现】Array VPN任意文件读取漏洞 【漏洞复现】好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件读取漏洞 附POC 【漏洞复现】金…

Lesson 08 string类 (上)

C&#xff1a;渴望力量吗&#xff0c;少年&#xff1f; 文章目录 一、STL1. 概念2. STL的六大组件3. STL的重要性 二、string类的介绍与使用1. 介绍2. 使用&#xff08;1&#xff09;string类对象的常见构造&#xff08;2&#xff09;string类对象的容量操作&#xff08;3&…

数字人透明屏幕是如何工作的?

数字人透明屏幕是一种令人兴奋的科技产品&#xff0c;它结合了人脸识别、全息影像技术以及透明屏幕&#xff0c;为人们带来了全新的互动体验。本文将详细介绍数字人透明屏幕的工作原理以及其应用场景。 工作原理 数字人透明屏幕的工作原理主要包括人脸识别和全息影像技术。人脸…

数学建模-基于LightGBM和BP神经网络的互联网招聘需求分析与预测

基于LightGBM和BP神经网络的互联网招聘需求分析与预测 整体求解过程概述(摘要) 就业是民生之本&#xff0c;是发展之基&#xff0c;也是安国之策。2020 年新冠肺炎疫情的爆发&#xff0c;稳就业成为应对疫情、稳定社会的重要保障之一。随着数据新动能的发展&#xff0c;互联网…

Python与设计模式--责任链模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…

LeetCode52. N-Queens II

文章目录 一、题目二、题解 一、题目 The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other. Given an integer n, return the number of distinct solutions to the n-queens puzzle. Example 1: I…

用CHAT总结费曼学习法的关键

问CHAT&#xff1a;费曼学习法的关键 CHAT回复&#xff1a;费曼学习法是由著名物理学家理查德费曼所发明的一种学习方法&#xff0c;旨在以深入理解为目标&#xff0c;帮助自己学习新的知识和技能。 费曼学习法有四个关键步骤&#xff1a; 1. 学习&#xff1a;首先&#xff0…

阿里云服务器2核2G3M配置购买和续费同享99元1年,最后2天赶紧囤货

经济型e实例2核2G 3M固定带宽 40G ESSD Entry云盘&#xff0c;价格为99元1年&#xff0c;这款云服务器是阿里云在11月份推出的特价云服务器&#xff0c;不管是用户还是老用户&#xff0c;都觉得这个价格确实非常划算&#xff0c;但是有的用户觉得现在暂时没有使用云服务器的需求…

​LeetCode解法汇总1670. 设计前中后队列

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 请你设计一…

Es6笔记之箭头函数与解构赋值

目录 箭头函数 箭头函数 this 箭头函数与普通函数的区别 解构赋值 数组解构 对象解构 展开运算符 与 剩余运算符 箭头函数 箭头函数是一种声明函数的简洁语法&#xff0c;它与普通函数并无本质的区别&#xff0c;差异性更多体现在语法格式上。 <script>// const …

LLM大语言模型

大语言模型的定义 大语言模型&#xff08;英文&#xff1a;Large Language Model&#xff0c;缩写LLM&#xff09;&#xff0c;也称大型语言模型&#xff0c;是一种人工智能模型&#xff0c;旨在理解和生成人类语言。它们在大量的文本数据上进行训练&#xff0c;可以执行广泛的…

在Rust中处理命令行参数和环境变量

1.摘要 Rust的命令行和环境变量处理在标准库中提供了一整套实现方法, 在本文中除了探索标准库的使用方法之外, 也在不断适应Rust独有的语法特点。在本文中, 我们通过标准库函数的返回值熟悉了迭代器的使用方法, 操作迭代器精确控制保存的内容, 包括字符串和键值对的使用方法。…

美创科技受邀亮相第二届全球数字贸易博览会

11月23日-27日&#xff0c;由浙江省人民政府、商务部共同主办的第二届全球数字贸易博览会&#xff08;以下简称“数贸会”&#xff09;圆满落幕。围绕“国家级、国际性、数贸味”的目标定位&#xff0c;以“数字贸易 商通全球”为主题&#xff0c;数贸会重点展示数字贸易全产业…

伪原创工具,免费的5款伪原创工具

寻找一款合适的伪原创工具是提高写作效率的重要一环。在这里&#xff0c;我们为您推荐了五款不同特点的伪原创工具&#xff0c;并对它们进行了详细的测评。 第一款伪原创工具&#xff1a;147SEO改写 147SEO改写是一款强大的AI智能伪原创写作工具&#xff0c;具备多个模板供用…

亚马逊云科技 re:Invent 2023:科技前沿风向标

一、前言 亚马逊云科技 re:Invent 2023 已于内华达州的拉斯维加斯盛大举行。 re:Invent 2023 直播活动地址&#xff1a;https://webinar.amazoncloud.cn/reInvent2023/ 关注参加 re:Invent 大会你将有机会参与学习、交流&#xff0c;聆听专家演讲&#xff0c;并观看 Amazon …

物理层之三种数据交换方式(电路交换、报文交换、分组交换(数据报方式、虚电路方式))

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Linux端口流量统计

Ubuntu sudo apt-get install wiresharkCentOS sudo yum install wiresharkUDP端口统计 sudo tshark -i <interface> -f "udp port <port_number>" -a duration:60 -q -z conv,udp请将 替换为你的网络接口&#xff0c;<port_number> 替换为要监…

玻色量子对外合作

2023年 2023.7 首个央企量子云计算项目&#xff0c;中标&#xff01; 2023.6 勇闯“量子电力”新领域&#xff0c;玻色量子与清大科越达成战略合作 2023.5 玻色量子签约移动云“五岳”量子云计算创新加速计划&#xff01; 2023.3 “量子计算通信”&#xff01;玻色量子与…

Mysql基础(六)多表查询

版权申明&#xff1a;本文用于个人学习记录&#xff0c;学习课程为黑马程序员的mysql教程。如需获取官方的学习视频和文档资料&#xff0c;请至黑马程序员官方获取。下面附上教学视频的链接地址&#xff0c;向提供免费教学视频的老师致敬&#xff0c;学如逆水行舟&#xff0c;不…