使用Python编写计算所有全为1的正方形子矩阵的数量的程序

使用Python编写计算所有全为1的正方形子矩阵的数量的程序

假设我们有m x n的二进制矩阵,我们必须找到有多少个全为1的正方形子矩阵。

所以,如果输入为:

0 1 1 1
1 1 1 1
0 1 1 1

那么输出将是15,因为有10个边长为1的正方形,4个边长为2的正方形和1个边长为3的正方形。则正方形总数= 10 + 4 + 1 = 15。

为了解决这个问题,我们将采取以下步骤−

  • 如果矩阵只有一个1,则
    • 返回1
  • 行:=矩阵的行数

  • 列:=矩阵[0]的列数

  • 结果:= 0

  • 对于行0到行数-1的行,执行以下操作

    • 对于列0到列数-1的列,执行以下操作
      • 如果行与0相同或列与0相同,则

      • 如果matrix [row,col]等于1,则

        • 结果:=结果+1
      • 否则当matrix [row,col]等于1时,则:
        • square:= 1 +(matrix [row-1,col],matrix [row,col-1]和matrix [row-1,col-1]的最小值)

        • matrix [row,col]:= square

        • 结果:=结果+ square

  • 返回结果

为了更好地理解,请参见以下实现−

示例

def solve(matrix):
   if matrix == [[1]]:
      return 1
   rows = len(matrix)
   cols = len(matrix[0])
   result = 0
   for row in range(rows):
      for col in range(cols):
         if (row == 0 or col == 0):
            if matrix[row][col] == 1:
               result += 1
         elif matrix[row][col] == 1:
            square = min(matrix[row-1][col], min(matrix[row][col-1], matrix[row-1][col-1])) + 1
            matrix[row][col] = square
            result += square
   return result
matrix= [[0,1,1,1],[1,1,1,1],[0,1,1,1]]
print(solve(matrix))

输入

{{0,1,1,1},{1,1,1,1},{0,1,1,1}}

输出

15

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程