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