Python 程式:檢查能否選修所有課程
假設我們有一個二維矩陣,其中 matrix[i] 表示註冊課程 i 所需的先修課程列表。現在,我們必須檢查是否可以選修所有課程。
因此,如果輸入類似於 matrix = [[1],[2],[]],則輸出為 True,因為我們可以先修課程 2,然後是課程 1,最後是課程 0。
為了解決這個問題,我們將遵循以下步驟:
定義一個函式 dfs()。這將接收 i 作為引數。
如果 vis[i] 為真,則
返回 false
如果 chk[i] 為真,則
返回 True
vis[i]:= True
對於 matrix[i] 中的每個 j,執行以下操作:
如果 dfs(j) 為假,則
返回 False
vis[i]:= False
chk[i]:= True
返回 True
在主方法中,執行以下操作:
vis:= 一個大小與矩陣行數相同的列表,初始值均為 false
chk:= 一個大小與矩陣行數相同的列表,初始值均為 false
對於從 0 到矩陣行數的 i,執行以下操作:
如果 dfs(i) 為假,則
返回 False
返回 True
讓我們看下面的實現來更好地理解:
示例
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))
輸入
matrix = [ [1], [2], [] ]
輸出
True
廣告