LintCode 615 課程表 Python題解

描述

There are a total of n courses you have to take, labeled from 0 to n - 1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

樣例

Example 1:

Input: n = 2, prerequisites = [[1,0]] 
Output: true

Example 2:

Input: n = 2, prerequisites = [[1,0],[0,1]] 
Output: false

相關題目

815. 課程表IV696. 課程表 III616. 安排課程127. 拓撲排序

 

接觸的第一道拓撲排序的題目。參考了九章題解寫出了答案,對該知識點仍然有一些不夠清晰的地方,相關題目下次可以繼續練習。

from collections import deque

class Solution:
    """
    @param: numCourses: a total of n courses
    @param: prerequisites: a list of prerequisite pairs
    @return: true if can finish all courses or false
    """
    def canFinish(self, numCourses, prerequisites):
        # write your code here
        queue = deque([])
        edges = {i:[]for i in range(numCourses)}#出度
        degrees = [0 for i in range(numCourses)]#入度
        for i,j in prerequisites:
            edges[j].append(i)
            degrees[i] += 1 
        for i in range(numCourses):
            if(degrees[i] == 0):
                queue.append(i)
                
        while(queue):
            node = queue.popleft()
            for i in edges[node]:
                degrees[i] -= 1
                if(degrees[i] == 0 ):
                    queue.append(i)
                
        if(degrees == [0 for i in range(numCourses)]):#所有點的入度爲零時,即能到達所有點
            return True
        else:
            return False

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章