Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับจำนวน square submatrices ที่เป็น 1 ทั้งหมดด้วย Python


สมมติว่าเรามีเมทริกซ์ขนาด m x n ที่ประกอบด้วย 0 และ 1 เราต้องหาว่ามี square submatrices (สี่เหลี่ยมจัตุรัส) กี่อันที่ประกอบด้วย 1 ทั้งหมด

เช่น ถ้าข้อมูลเข้าเป็น

0111
1111
0111

ผลลัพธ์จะเป็น 15 เพราะมีสี่เหลี่ยมจัตุรัสขนาด 1 จำนวน 10 อัน ขนาด 2 จำนวน 4 อัน และขนาด 3 จำนวน 1 อัน รวม 10 + 4 + 1 = 15

ขั้นตอนการแก้ปัญหา

  • ถ้าเมทริกซ์เป็น [[1]] ให้คืน 1
  • rows = จำนวนแถว, cols = จำนวนคอลัมน์
  • result = 0
  • วนลูปทุก cell (row, col):
    • ถ้าอยู่ที่แถวแรกหรือคอลัมน์แรก และค่าเป็น 1: result += 1
    • มิฉะนั้น ถ้าค่าเป็น 1:
      • square = 1 + min(matrix[row-1][col], matrix[row][col-1], matrix[row-1][col-1])
      • อัปเดต matrix[row][col] = square (เก็บขนาดสี่เหลี่ยมสูงสุดที่มุมล่างขวาอยู่ที่นี่)
      • result += square
  • คืนค่า result

ตัวอย่างโค้ด

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], 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