Python程序:查找更改一个水单元格为陆地单元格后的最大岛屿
假设我们有一个二进制矩阵,其中 1 代表陆地,0 代表水。岛屿是一组被水包围的 1。我们必须找到最大岛屿的大小。我们最多可以将一个水单元格更改为陆地单元格。
因此,如果输入类似于
| 1 | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 1 | 0 |
| 1 | 1 | 1 |
则输出将为 7,因为我们可以将一个水单元格转换为陆地以连接这两个岛屿。因此,最终矩阵如下所示:−
| 1 | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 1 | 0 |
| 1 | 1 | 1 |
为了解决这个问题,我们将遵循以下步骤:−
R := mat 的行数,C := mat 的列数
mass := 一个新的映射
id := 555
定义一个函数 floodfill()。这将采用 r、c、id
如果 r 和 c 在矩阵范围内并且 mat[r, c] 为 1,则
mat[r, c] := id
mass[id] := mass[id] + 1
对于 [(r + 1, c) ,(r − 1, c) ,(r, c + 1) ,(r, c − 1) ] 中的每一对 (r2, c2),执行以下操作:
floodfill(r2, c2, id)
从主方法执行以下操作:−
对于从 0 到 R 的范围内的 r,执行以下操作:
对于从 0 到 C 的范围内的 c,执行以下操作:
如果 mat[r, c] 等于 1,则
id := id + 1
mass[id] := 0
floodfill(r, c, id)
ans := (所有 mass 值和 1) 中的最大值
对于从 0 到 R − 1 的范围内的 r,执行以下操作:
对于从 0 到 C − 1 的范围内的 c,执行以下操作:
如果 mat[r, c] 不等于 0,则
转到下一次迭代
island_set := 一个新的集合
对于 [(r + 1, c) ,(r − 1, c) ,(r, c + 1) ,(r, c − 1) ] 中的每一对 (r2, c2),执行以下操作:
如果 r2 和 c2 在 mat 的范围内并且 mat[r2, c2] 为 1,则
将 mat[r2, c2] 添加到 island_set 中
ans := ans 和 (1 + 每个岛屿在 island_set 中的每个 mass[island] 的总和) 中的最大值
返回 ans
让我们查看以下实现以更好地理解:−
示例
class Solution:
def solve(self, mat):
R, C = len(mat), len(mat[0])
mass = {}
id = 555
def floodfill(r, c, id):
nonlocal R, C, mat, mass
if 0 <= r < R and 0 <= c < C and mat[r][c] == 1:
mat[r][c] = id
mass[id] += 1
for r2, c2 in [(r + 1, c), (r − 1, c), (r, c + 1),
(r, c − 1)]:
floodfill(r2, c2, id)
for r in range(R):
for c in range(C):
if mat[r][c] == 1:
id += 1
mass[id] = 0
floodfill(r, c, id)
ans = max([val for val in mass.values()] + [1])
for r in range(R):
for c in range(C):
if mat[r][c] != 0:
continue
island_set = set()
for r2, c2 in [(r + 1, c), (r − 1, c), (r, c + 1),(r, c − 1)]:
if 0 <= r2 < R and 0 <= c2 < C and mat[r2][c2]:
island_set.add(mat[r2][c2])
ans = max(ans, 1 + sum([mass[island] for island in island_set]))
return ans
ob = Solution()
matrix = [
[1, 0, 1],
[0, 0, 0],
[1, 1, 0],
[1, 1, 1]
]
print(ob.solve(matrix))输入
[ [1, 0, 1], [0, 0, 0], [1, 1, 0], [1, 1, 1] ]
输出
7
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP