📜  检查二进制矩阵中的水平和垂直对称性(1)

📅  最后修改于: 2023-12-03 15:26:44.934000             🧑  作者: Mango

检查二进制矩阵中的水平和垂直对称性

在二进制矩阵中,我们经常需要判断其是否具有对称性,包括水平对称和垂直对称。本文将介绍如何实现检查二进制矩阵中水平和垂直对称性的算法。

水平对称性

二进制矩阵中如果有一条横线将其分为两半,且左右两半完全对称,则称其具有水平对称性。

检查水平对称性的算法思路如下:

  1. 遍历矩阵的前一半(行数除以2)。
  2. 检查该行和对应的行是否完全相等。

代码如下:

def check_horizontal_symmetry(matrix):
    rows = len(matrix)
    cols = len(matrix[0])
    for i in range(rows//2):
        if matrix[i] != matrix[rows-i-1]:
            return False
    return True
垂直对称性

二进制矩阵中如果有一条竖线将其分为两半,且左右两半完全对称,则称其具有垂直对称性。

检查垂直对称性的算法思路如下:

  1. 遍历矩阵的前一半(列数除以2)。
  2. 检查该列和对应的列是否完全相等。

代码如下:

def check_vertical_symmetry(matrix):
    rows = len(matrix)
    cols = len(matrix[0])
    for j in range(cols//2):
        for i in range(rows):
            if matrix[i][j] != matrix[i][cols-j-1]:
                return False
    return True
完整代码

完整的二进制矩阵对称性检查代码如下:

def check_horizontal_symmetry(matrix):
    rows = len(matrix)
    cols = len(matrix[0])
    for i in range(rows//2):
        if matrix[i] != matrix[rows-i-1]:
            return False
    return True

def check_vertical_symmetry(matrix):
    rows = len(matrix)
    cols = len(matrix[0])
    for j in range(cols//2):
        for i in range(rows):
            if matrix[i][j] != matrix[i][cols-j-1]:
                return False
    return True
测试

我们来测试一下这个程序,下面是一个测试矩阵:

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

该矩阵具有水平对称性和垂直对称性,我们将其传入程序:

matrix = [[1, 0, 1, 1],
          [0, 1, 0, 0],
          [1, 0, 1, 1],
          [1, 0, 1, 1]]
print(check_horizontal_symmetry(matrix)) # True
print(check_vertical_symmetry(matrix)) # True

程序返回正确结果,说明检查算法正确。