Suzy明天能抽到温柔的题,不要图!!!207课程表

207课程表

  1. 用一个list记录所有的课程的入度,即所需要的先修课的数量
  2. 如果某一节课的入度为0,即说明它不需要任何先修课,将所有把它作为先修课的课程的入度减一
  3. 已经修读过的课程,它的入度用-1做标记
  4. 循环直到list中没有入度为0的结点
  5. 如果此时数组全为-1表示所有课都修过了,True;反之False

入度表法/BFS法

class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        count=[0]*numCourses
        for i in prerequisites:
            count[i[0]]+=1
        while (0 in count)==True:
            index=count.index(0)
            for j in prerequisites:
                if j[1]==index:
                    count[j[0]]-=1
                else:
                    continue
            count[index]=-1
            
        if count==[-1]*numCourses:
            return True
        return False

你可能感兴趣的:(算法,数据结构)