Lintcode 615. Course Schedule

题目求先修课程有没有冲突,算法是用bfs, 拓扑排序

拓扑排序:找到有向图中,从头到尾的一种排序,所以中间没有环路。

算法:首先需要邻接矩阵和计算每个课程的入度。将入度为0的排入队列中,对队列中的点进行遍历,将队列中点的邻居的入度减1,如果入度减为0了,将邻居也排入队列中,直到队列为空。

在这道题中,可以设置一个count来计算是否把所有的课程都遍历一遍,如果有闭环,闭环的接口始终入度不可能为0,就无法被放入队列中,所以count就会不等于总的课程数。

python代码:

```

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

        edge = [[] for i in range(numCourses)]

        indegree = [0] * numCourses

        for i, j in prerequisites:

            edge[j].append(i)

            indegree[i] += 1

        cnt = 0

        queue = deque()

        for i in range(numCourses):

            if indegree[i] == 0:

                queue.append(i)

        while queue:

            course = queue.popleft()

            cnt += 1

            for requirecourse in edge[course]:

                indegree[requirecourse] -= 1

                if indegree[requirecourse] == 0:

                    queue.append(requirecourse)

        return cnt == numCourses

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.读入一系列由空白分割的(名字,值)对,其中每个名字是由空白分开的一个单词,值是一个整数或者一个浮点值,计算并打...
    安东可阅读 1,729评论 0 0
  • 学弟发了张偷拍我的照片,要不是看到相同的衣服,我完全不知道照片里的人是我:整个人穿得臃肿,抢到红后还露出了...
    野马厩阅读 2,675评论 0 1
  • 图/文 利子 如果你是一点光, 只要你亮起来, 你的微光就会吸引微光。
    Angel利子阅读 2,325评论 0 2
  • 黄昏过后,夜风干吼。我是个自以为是的小孩子,追逐着自以为是的翩翩自由。 只是躺在床上我就觉得心头难受,仿佛全世界全...
    李一十八阅读 3,106评论 0 1