企业网站需要多少费用美篇制作app下载官网免费
企业网站需要多少费用,美篇制作app下载官网免费,个人网站如何进行网络推广,中国建设报官网题目 有一个大小是N * M的战场地图#xff0c;被墙壁’#‘分隔成大小不同的区域#xff0c;上下左右四个方向相邻的空地∵#xff0c;属于同一个区域#xff0c;只有空地上可能存在敌人’E’#xff0c;请求出地图上总共有多少区域里的敌人数小于K。 输入描述 第一行输入为…题目 有一个大小是N * M的战场地图被墙壁’#‘分隔成大小不同的区域上下左右四个方向相邻的空地∵属于同一个区域只有空地上可能存在敌人’E’请求出地图上总共有多少区域里的敌人数小于K。 输入描述 第一行输入为 N M K; N表示地图的行数M表示地图的列数K表示目标敌人数量NM100 之后为一个N * M大小的字符数组 输出描述 敌人数小于K的区域数量 示例1: 输入: 3 5 2 …#EE E.#E. ###… 输出 1 说明 地图被墙壁分为两个区域左边区域有1个敌人右边区域有3个敌人符合条件的区域数量是1 思路 递归遍历解决 如果某个位置不为‘#’,那么从此位置递归遍历找上下左右不为‘#’的区域计算其中的E的数量并且将该区域标记为已访问下次遍历时如果字符不为#且该位置未被遍历过说明是一个新区域最后计算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/diannao/90757.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!