leetcode-207-课程表

题目描述:

 

 方法一:dfs

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        def dfs(i, adjacency, flags):
            if flags[i] == -1: return True
            if flags[i] == 1: return False
            flags[i] = 1
            for j in adjacency[i]:
                if not dfs(j, adjacency, flags): return False
            flags[i] = -1
            return True
        
        adjacency = [[] for _ in range(numCourses)]
        flags = [0 for _ in range(numCourses)]
        for cur, pre in prerequisites:
            adjacency[pre].append(cur)
        for i in range(numCourses):
            if not dfs(i, adjacency, flags): return False
        return True

方法二:拓扑排序,bfs

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:    
        adjacency = [[] for _ in range(numCourses)]
        indegrees = [0 for _ in range(numCourses)]
        for cur, pre in prerequisites:
            adjacency[pre].append(cur)
            indegrees[cur] += 1
        queue = []
        for i in range(numCourses):
            if not indegrees[i]:
                queue.append(i)
        while queue:
            pre = queue.pop(0)
            numCourses -= 1
            for cur in adjacency[pre]:
                indegrees[cur] -= 1
                if indegrees[cur] == 0:
                    queue.append(cur)
        return numCourses==0
            

猜你喜欢

转载自www.cnblogs.com/oldby/p/11617417.html
今日推荐