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

โปรแกรมตรวจสอบจำนวนวิธีที่เราสามารถเลือกเซลล์ว่างของเมทริกซ์ใน python


สมมติว่าเรามีเมทริกซ์ไบนารี N x N โดยที่ 0 สำหรับเซลล์ว่างและ 1 คือเซลล์ที่ถูกบล็อก เราต้องหาจำนวนวิธีในการเลือกเซลล์ว่าง N เซลล์ เพื่อให้ทุกแถวและทุกคอลัมน์มีเซลล์ที่เลือกอย่างน้อยหนึ่งเซลล์ หากคำตอบคือผลลัพธ์ที่ใหญ่มาก mod 10^9 + 7

ดังนั้นหากอินพุตเป็นแบบ

0
0
0
0
0
0
0
1
0

จากนั้นผลลัพธ์จะเป็น 4 เนื่องจากเรามีการกำหนดค่าต่อไปนี้ (โดยที่ x คือเซลล์ที่เลือก) -

โปรแกรมตรวจสอบจำนวนวิธีที่เราสามารถเลือกเซลล์ว่างของเมทริกซ์ใน python

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของเมทริกซ์
  • กำหนดฟังก์ชัน f() นี่จะใช้เวลา i, bs
  • ถ้าฉัน>=n แล้ว
    • คืน 1
  • ตอบ :=0
  • สำหรับ j ในช่วง 0 ถึง n ทำ
    • ถ้า matrix[i, j] เหมือนกับ 0 และ (2^j AND bs เหมือนกับ 0) แล้ว
      • ans :=ans + f(i + 1, bs OR 2^j)
  • คืนสินค้า
  • จากการเรียกเมธอดหลักและคืนค่า f(0, 0)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, matrix):
      n = len(matrix)

      def f(i, bs):
         if i >= n:
            return 1
         ans = 0
         for j in range(n):
            if matrix[i][j] == 0 and ((1 << j) & bs == 0):
               ans += f(i + 1, bs | (1 << j))
         return ans

      return f(0, 0)

ob = Solution()
matrix = [
   [0, 0, 0],
   [0, 0, 0],
   [0, 1, 0]
]
print(ob.solve(matrix))

อินพุต

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

ผลลัพธ์

4