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

Chương trình kiểm tra xem chúng ta có thể tham gia tất cả các khóa học hay không bằng Python

Giả sử chúng ta có một ma trận 2D trong đó ma trận [i] đại diện cho danh sách các khóa học tiên quyết cần thiết để đăng ký khóa học i. Bây giờ, chúng tôi phải kiểm tra xem có thể tham gia tất cả các khóa học hay không.

Vì vậy, nếu đầu vào giống như ma trận =[[1], [2], []], thì đầu ra sẽ là True, vì chúng ta có thể học khóa 2, rồi khóa 1 và sau đó là khóa 0.

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

  • Định nghĩa một hàm dfs (). Điều này sẽ mất tôi

  • nếu vis [i] là true, thì

    • trả về false

  • nếu chk [i] là true thì

    • trả về True

  • vis [i]:=True

  • đối với mỗi j trong ma trận [i], thực hiện

    • nếu dfs (j) là false thì

      • trả về Sai

  • vis [i]:=Sai

  • chk [i]:=Đúng

  • trả về True

  • Từ phương thức chính, thực hiện như sau -

  • vis:=một danh sách có kích thước giống như số hàng của ma trận và ban đầu tất cả đều sai

  • chk:=một danh sách có kích thước giống như số hàng của ma trận và ban đầu tất cả đều sai

  • đối với tôi trong phạm vi 0 đến số hàng của ma trận, hãy thực hiện

    • nếu dfs (i) là false thì

      • trả về Sai

  • trả về True

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

Ví dụ

class Solution:
   def solve(self, matrix):
      vis=[False for _ in matrix]
      chk=[False for _ in matrix]
      def dfs(i):
         if vis[i]: return False
         if chk[i]: return True
         vis[i]=True
         for j in matrix[i]:
            if not dfs(j):
               return False
         vis[i]=False
         chk[i]=True
         return True
   for i in range(len(matrix)):
      if not dfs(i):
         return False
   return True
ob = Solution()
matrix = [ [1], [2], [] ]
print(ob.solve(matrix))

Đầu vào

matrix = [
   [1],
   [2],
   []
]

Đầu ra

True