社区常称:寻找价值最大的矿堆
通过率 60% · 提交 1,061 · 通过 636
小慕得到了一张由 '0'(空地)、'1'(银矿)、'2'(金矿)组成的地图,只能由的金矿或银矿连接形成。 超出地图范围可以认为是空地。 假设银矿价值 1 ,金矿价值 2 ,小慕需要找出地图中并输出该矿堆的价值。
这类题属于华为 OD 机考真题方向中「100分 / DFS」方向的高频题型,通常考察对「100分 / DFS」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
地图元素信息如下
22220
00000
00000
01111
地图范围最大为 300 * 300,0 <= 地图元素 <= 2
矿堆的最大价值。
示例 1
输入示例
22220 00000 00000 01111
输出示例
8
示例 2
输入示例
22220 00020 00010 01111
输出示例
15
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
地图由 '0'(空地)、'1'(银矿,价值 1)、'2'(金矿,价值 2)组成,上下左右相邻的矿格连成一个矿堆,求价值最大的矿堆的总价值。
本题与经典题「岛屿的最大面积」几乎完全一致,唯一区别是格子有 1 和 2 两种价值——把「数面积」换成「累加价值」即可。用 BFS 洪水填充逐个统计连通块:
1. 逐行读入地图字符串(读到空行/EOF 为止),得到 n 行 m 列的字符网格;另开同尺寸的 check_list 标记每个格子是否搜索过。 2. 双重循环扫描全图:遇到值不是 '0' 且未被搜索过的格子,就从它启动一次 BFS。 3. BFS 用队列扩展:弹出格子时把它的价值累加进当前矿堆价值 curValue;向四个方向扩展时,只把未越界、非 '0'、未访问的邻格入队,并在入队的同时立即标记已访问,防止同一格被重复入队、重复计价。 4. 每次 BFS 结束用 curValue 更新答案,扫完全图后输出最大值。
check_list 标记矩阵本身就是 n×m 大小;队列最坏情况也可能容纳 O(n×m) 个格子。grid[x][y] - '0',Java 里的 Character.getNumericValue),直接拿字符参与运算会出错。登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
示例 3
输入示例
20000 00020 00000 00111
输出示例
3
时间限制 1000 ms · 内存限制 128 MB
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有