给定一个由 0/1
组成的矩阵,翻转至多一个 0
为 1
,使得矩阵中相连(上下左右)的 1
形成的最大连通区域面积最大。分两步处理:
1
的格子,使用深度优先或广度优先(DFS/BFS)将整片连通区域标记为同一个 id(从 2
开始,避开 0/1
),同时统计该岛屿的面积。id
对应的面积保存到哈希表 area[id]
中。0
翻转的效果ShopeeExpress的包裹配送站在东南亚某国覆盖了一部分区域。如果有两个区域是相邻的,或者可以经过一系列相邻的区域连通起来,包裹在这两个区域中的传递成本就非常低,否则成本会非常高。
为了节约成本,同一连通区域的面积应当尽可能大。
为了简化问题,我们把地图看作一个二维矩阵,每个区域就是其中的一个元素,一个区域的上下左右 四个区域是它的相邻区域。被覆盖到的区域用1表示,否则用0表示。
产品同学想知道,如果可以建立配送站覆盖一个新区域,那么最大的连通区域面积可以达到多少呢?
如果ShopeeExpress已经覆盖了全部的区域,则无法覆盖新区域。请直接输出当前覆盖的全部区域的大小。
第一行为矩阵行数 n ,列数 m
接下来输入一个二维矩阵(可理解为通过多行多列的数字形式输入 ),矩阵中的元素取值为 0 或 1
若矩阵中存在 0(即还有未覆盖区域 ):输出为一个整数,表示 “将一个 0 区域变为 1 后,所能形成的最大连通区域的面积”(连通区域指相邻或经相邻连通的 1 区域,相邻为上下左右四个方向 )。
若矩阵中全为 1(已覆盖全部区域 ):输出为当前全部1 区域的总面积(即矩阵中 1 的总个数 ) ,表示无法覆盖新区域时直接输出现有覆盖规模。
输入
2 2
1 0
1 0
输出
3
说明
覆盖任意一个0,都会将两个1连通,因此答案是3
输入
2 2
1 1
1 1
输出
4