Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem ma trận A có thể được chuyển đổi thành B hay không bằng cách thay đổi tính chẵn lẻ của các phần tử góc của bất kỳ ma trận con nào trong Python

Giả sử chúng ta có hai ma trận nhị phân N X M A và B. Trong một phép toán duy nhất, chúng ta có thể chọn một ma trận con (ít nhất là 2x2) và chuyển đổi tính chẵn lẻ của các phần tử góc (các bit lật). Cuối cùng, chúng ta phải kiểm tra xem ma trận A có thể được chuyển đổi thành B bằng cách thực hiện bất kỳ phép toán nào hay không.

Vì vậy, nếu đầu vào giống như

1 0 0
1 0 1
1 0 0


Kiểm tra xem ma trận A có thể được chuyển đổi thành B hay không bằng cách thay đổi tính chẵn lẻ của các phần tử góc của bất kỳ ma trận con nào trong Python

thì đầu ra sẽ là True vì chúng ta có thể thực hiện thao tác trên ma trận con hình vuông phía trên bên trái có kích thước (2x2) trên mat1 để nhận được mat2.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • row:=số hàng của mat1
  • column:=số cột của mat1
  • đối với tôi trong phạm vi từ 1 đến hàng - 1, thực hiện
    • đối với j trong phạm vi từ 1 đến cột - 1, thực hiện
      • nếu mat1 [i, j] không giống với mat2 [i, j], thì
        • mat1 [i, j]:=mat1 [i, j] XOR 1
        • mat1 [0, 0]:=mat1 [0, 0] XOR 1
        • mat1 [0, j]:=mat1 [0, j] XOR 1
        • mat1 [i, 0]:=mat1 [i, 0] XOR 1
  • đối với tôi trong phạm vi từ 0 đến hàng - 1, thực hiện
    • đối với j trong phạm vi từ 0 đến cột - 1, thực hiện
      • nếu mat1 [i, j] không giống với mat2 [i, j], thì
        • trả về Sai
  • trả về True

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def solve(mat1, mat2):
   row = len(mat1)
   column = len(mat1[0])
   for i in range(1, row):
      for j in range(1, column):
         if mat1[i][j] != mat2[i][j]:
            mat1[i][j] ^= 1
            mat1[0][0] ^= 1
            mat1[0][j] ^= 1
            mat1[i][0] ^= 1
   for i in range(row):
      for j in range(column):
         if mat1[i][j] != mat2[i][j]:
            return False
   return True
mat1 = [
         [1, 0, 0],
         [1, 0, 1],
         [1, 0, 0]]
mat2 = [
         [0, 1, 0],
         [0, 1, 1],
         [1, 0, 0]]
print(solve(mat1, mat2))

Đầu vào

[
   [1, 0, 0],
   [1, 0, 1],
   [1, 0, 0]],
[
   [0, 1, 0],
   [0, 1, 1],
   [1, 0, 0]]

Đầu ra

True