Program to check whether we can take all courses or not in Python


Suppose we have a 2D matrix where matrix[i] represents the list of prerequisite courses needed to enroll course i. Now, we have to check whether it is possible to take all courses or not.

So, if the input is like matrix = [[1],[2],[]], then the output will be True, as we can take course 2, then course 1, and then course 0.

To solve this, we will follow these steps −

  • Define a function dfs(). This will take i

  • if vis[i] is true, then

    • return false

  • if chk[i] is true, then

    • return True

  • vis[i]:= True

  • for each j in matrix[i], do

    • if dfs(j) is false, then

      • return False

  • vis[i]:= False

  • chk[i]:= True

  • return True

  • From the main method, do the following −

  • vis:= a list of size same as row count of matrix and initially all are false

  • chk:= a list of size same as row count of matrix and initially all are false

  • for i in range 0 to row count of matrix, do

    • if dfs(i) is false, then

      • return False

  • return True

Let us see the following implementation to get better understanding −

Example

 Live Demo

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))

Input

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

Output

True

Updated on: 07-Oct-2020

98 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements