冲刺蓝桥杯Java b组——合并区域(DFS深度优先)

今天刚好除夕,先祝大家除夕快乐。作者也希望各位读者在新的一年事业有成,健健康康。

作者最近在准备蓝桥杯java b组,因此在刷相关的题目,希望这里的分享可以帮助到大家。


前言

有关DFS的相关题目及java实现。


一、问题分析

1.1问题描述

        小蓝在玩一款种地游戏。现在他被分配给了两块大小均为N*N的正方形区域。这两块区域都按照N*N的规格进行了均等划分,划分成了若干块面积相同的小区域,其中每块小区域要么是岩石,要么就是土壤,在垂直或者水平方向上相邻的土壤可以组成一块土地。现在小蓝想要对这两块区域沿着边缘进行合并,他想知道合并以后可以得到的最大的一块土地的面积是多少(土地的面积就是土地中土壤小区域的块数)

1.2输入格式:

        第一行一个整数。

        接下来N行表示第一块区域,每行N个值为0或1的的整数,相邻的整数之间用空格进行分隔。值为0或1的整数,相邻的整数之间用空格进行分隔。值为0表示这块区域为演示,值为1表示这块区域为土壤。

1.3输出格式

        一个整数表示将两块区域合并后可以产生的最大土地的面积。

1.4问题分析

        这是一个典型的DFS或者BFS问题,就是将两个n*n的矩阵以任意的形式拼接。其实就是求所有连接的1的最大数量。只要便利所有的拼接情况写一个递归就好了。

        然后将程序分成4部分:

第一部分:录入数据

第二部分:将矩阵旋转(一个xuanzhuan函数)

第三部分:将举证拼接(2个矩阵拼接然后补成一个大矩形,空的地方填写0)

第四部分:求最大土地面积(DFS)

二、解体题步骤

2.1录入数据

        简单的两个新建二维数组,然后两个for循环写入

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int map1[][]  = new int[n][n];
int map2[][]  = new int[n][n];
		
for(int i=0;i<n;i++) {
	for(int j=0;j<n;j++) {
		map1[i][j]=sc.nextInt();
		}
	}
for(int i=0;i<n;i++) {
	for(int j=0;j<n;j++) {
		map2[i][j]=
### 蓝桥杯 Java 考前冲刺知识点总结 #### 一、核心编程能力 蓝桥杯竞赛注重考察选手的基础编程能力和逻辑思维。以下是几个重要的知识点: 1. **基本语法** 掌握 Java 的基本语法规则,包括变量声明、数据类型转换以及运算符优先级等内容[^2]。 2. **控制流** 需要熟悉 `if` 条件判断、循环 (`for`, `while`) 和分支结构 (`switch-case`) 等控制流程的实现方式及其优化技巧。 3. **数与字符串处理** 数操作是常见考点之一;另外还需精通 String 类的方法应用,例如 substring(), replace() 等函数的功能及性能特点[^2]。 4. **面向对象概念** 对类定义、继承关系的理解非常重要,在实际题目解答过程中可能会涉及到抽象方法或者接口的设计思路。 5. **集合框架** 学会合理选用 ArrayList, HashSet 或者 HashMap 这些容器来存储并管理大量数据项可以有效提升解题效率[^2]。 6. **异常处理机制** 正确捕获可能出现的各种运行时错误对于编写稳定可靠的程序至关重要[^2]。 7. **文件I/O操作** 文件读写也是常考的内容之一,应该熟练掌握 BufferedReader/BufferedWriter 及其他相关工具类的应用场景。 8. **多线程技术简介** 尽管不是每年必考项目,但对于某些特定类型的试题来说了解 Thread 创建方式还是很有帮助的[^2]。 #### 二、推荐复习资料 为了更好地准备蓝桥杯比赛中的 Java 编程部分,建议参考如下书籍和资源进行学习: - **教材方面**: - *《Java语言程序设计》* (作者: 郎波),这本书全面介绍了 Java 基础知识体系,并配有丰富的实例练习可以帮助巩固所学理论。 - *《C++程序设计基础》*(周霭如 林伟健编著),虽然主要针对 C++,但是其中关于算法思想的部分同样适用于 Java 开发人员的学习需求. - **在线平台**: 利用 LeetCode , Codeforces 平台上的相应分类刷题活动能够极大提高实战经验水平. - **历年真题解析文档**: 查找历届蓝桥杯大赛官方发布的 java 方向赛题详解材料作为重点研习方向. ```java // 示例代码展示如何利用HashMap解决简单的计数问题 import java.util.HashMap; public class WordCount { public static void main(String[] args){ String sentence = "hello world hello"; // 初始化hashmap用于统计词频 HashMap<String,Integer> map=new HashMap<>(); // 分割句子成单词列表 String [] words=sentence.split(" "); // 遍历每个单词更新其对应的次数值 for(String word :words ){ Integer count=map.get(word); if(count==null){ map.put(word,1); }else{ map.put(word,count+1); } } System.out.println(map.toString()); } } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱笨笨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值