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

Kiểm tra xem ma trận có thể được chuyển đổi thành ma trận khác hay không bằng cách chuyển ma trận con vuông trong Python

Giả sử chúng ta có hai N X M được gọi là mat1 và mat2. Trong một phép toán, chúng ta có thể hoán vị bất kỳ ma trận con vuông nào trong mat1. Chúng ta phải kiểm tra xem chúng ta có thể lấy mat2 từ mat1 hay không bằng cách thực hiện thao tác đã cho.

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

5 6 7
1 2 3
6 8 9


5 6 2
1 7 3
6 8 9

thì đầu ra sẽ là True, bởi vì nếu chúng ta chuyển vị trí của ma trận con trên cùng bên phải có kích thước 2x2 của mat1, chúng ta sẽ 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 ma trận
  • column:=số cột của ma trận
  • đối với tôi trong phạm vi từ 0 đến hàng - 1, thực hiện
    • temp1:=một danh sách mới, temp2:=một danh sách mới
    • r:=i, col:=0
    • while r> =0 và col
    • chèn mat1 [r, col] vào temp1
    • chèn mat2 [r, col] vào temp2
    • r:=r - 1, col:=col + 1
  • sắp xếp danh sách temp1 và temp2
  • đối với tôi trong phạm vi từ 0 đến kích thước của temp1 - 1, thực hiện
    • nếu temp1 [i] không giống với temp2 [i], thì
      • trả về Sai
  • đối với j trong phạm vi từ 1 đến cột - 1, thực hiện
    • temp1:=một danh sách mới, temp2:=một danh sách mới
    • r:=row - 1, col:=j
    • while r> =0 và col
    • chèn mat1 [r, col] vào temp1
    • chèn mat2 [r, col] vào temp2
    • r:=r - 1, col:=col + 1
  • sắp xếp danh sách temp1 và temp2
  • đối với tôi trong phạm vi từ 0 đến kích thước của temp1 - 1, thực hiện
    • nếu temp1 [i] không giống với temp2 [i], 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(row):
          temp1 = []
          temp2 = []
          r = i
          col = 0
          while r >= 0 and col < column:
             temp1.append(mat1[r][col])
             temp2.append(mat2[r][col])
             r -= 1
             col += 1
          temp1.sort()
          temp2.sort()
          for i in range(len(temp1)):
             if temp1[i] != temp2[i]:
                return False
       for j in range(1, column):
          temp1 = []
          temp2 = []
          r = row - 1
          col = j
          while r >= 0 and col < column:
             temp1.append(mat1[r][col])
             temp2.append(mat2[r][col])
             r -= 1
             col += 1
          temp1.sort()
          temp2.sort()
          for i in range(len(temp1)):
             if temp1[i] != temp2[i]:
                return False
       return True
    mat1 = [
          [5, 6, 7],
          [1, 2, 3],
          [6, 8, 9]]
    mat2 = [
          [5, 6, 2],
          [1, 7, 3],
          [6, 8, 9]]
    print(solve(mat1, mat2))

    Đầu vào

    [
       [5, 6, 7],
       [1, 2, 3],
       [6, 8, 9]],
    [
       [5, 6, 2],
       [1, 7, 3],
       [6, 8, 9]]

    Đầu ra

    True