在Python矩阵中查找最大岛屿面积的程序
假设我们有一个二进制矩阵。在这里1代表土地,0代表水,而岛屿是1的一组,它们相邻,周围被水包围。我们可以假设矩阵的边缘被水包围。我们必须找到矩阵中最大的岛屿的面积。
所以,如果输入像
0 | 0 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 0 |
那么输出将为6。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能
dfs()
。这将采用矩阵r,c总计:=总计+ 1
矩阵[r,c]:= 0
如果r-1> = 0并且matrix [r-1,c]与1相同,则
dfs(矩阵,r-1,c)
如果c-1> = 0并且matrix [r,c-1]与1相同,则
dfs(矩阵,r,c-1)
如果r + 1 <r_len并且matrix [r + 1,c]与1相同,则
dfs(矩阵,r + 1,c)
如果c + 1 <c_len并且matrix [r,c + 1]与1相同,则
dfs(矩阵,r,c +1)
从主要方法中,执行以下操作-
r_len:=矩阵的行数
c_len:=矩阵的列数
max_island:= 0
对于0到r_len-1范围内的r
如果matrix [r,c]与1相同,则
总计:= 0
dfs(matrix,r,c)
max_island:= max_island的最大值,总计
对于0到c_len-1范围内的c
返回max_island
让我们看下面的实现以更好地理解-
示例
class Solution:def solve(self, matrix):
self.r_len = len(matrix)
self.c_len = len(matrix[0])
max_island = 0
for r in range(self.r_len):
for c in range(self.c_len):
if matrix[r][c] == 1:
self.total = 0
self.dfs(matrix, r, c)
max_island = max(max_island, self.total)
return max_island
def dfs(self, matrix, r, c):
self.total += 1
matrix[r][c] = 0
if r - 1 >= 0 and matrix[r - 1][c] == 1:
self.dfs(matrix, r - 1, c)
if c - 1 >= 0 and matrix[r][c - 1] == 1:
self.dfs(matrix, r, c - 1)
if r + 1 < self.r_len and matrix[r + 1][c] == 1:
self.dfs(matrix, r + 1, c)
if c + 1 < self.c_len and matrix[r][c + 1] == 1:
self.dfs(matrix, r, c + 1)
ob = Solution()matrix = [ [0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 0] ]
print(ob.solve(matrix))
输入项
matrix = [[0, 0, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 0] ]
输出结果
6
以上是 在Python矩阵中查找最大岛屿面积的程序 的全部内容, 来源链接: utcz.com/z/353394.html