# 区域生长法
class Solution:
def area(self,matrix):
if len(matrix) != 0 and len(matrix[0]) != 0:
# 模板矩阵,判断是否遍历过
mask = [[0]*len(matrix[0]) for i in range(len(matrix))]
i = 0
j = 0
results = []
for i in range(len(matrix)):
for j in range(len(matrix[0])):
# 寻找每一个联通域的种子
if mask[i][j] == 0 and matrix[i][j] != 0:
results.append(self.search(matrix,mask,i,j))
return results
else:
return 0
def search(self,matrix,mask,i,j):
# 满足下面条件,才进行像素点邻域的扩展递归
# 1,边界条件
# 2,模板为0,表示未遍历过
# 3,像素矩阵不为0
if i < len(matrix) and j < len(matrix[0]) and i >= 0 and j >= 0 and\
mask[i][j] == 0 and matrix[i][j] != 0:
mask[i][j] = 1
return 1 + self.search(matrix,mask,i+1,j) + self.search(matrix,mask,i,j+1) + \
self.search(matrix,mask,i,j-1) + self.search(matrix,mask,i-1,j)
else:
return 0
Matrix = [[1,2,3,0,0],[2,0,0,0,0],[0,0,0,0,1]]
S = Solution()
S.area(Matrix)