输入
3
[[1,0],[2,1],[0,2]]
结果为:
false
因为组成了一个环,0可修的前提有1,1可修的前提有2,2可修的前提有0,所以无法拓扑排序
思路为 BFS
1、queue保存所有起点(入度为0的点)
2、保存每个点的所有后继点
3、从起点开始,每次删除一个,入度减1,入度为0,说明这个点可以做为新的起点
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
queue = []
if len(prerequisites) == 0:
return True
in_degrees = [0 for _ in range(numCourses)]
adj = [set() for _ in range(numCourses)]
for i in range(len(prerequisites)):
in_degrees[prerequisites[i][0]] += 1
adj[prerequisites[i][1]].add(prerequisites[i][0])
for i in range(numCourses):
if(in_degrees[i] == 0):
queue.append(i)
num = 0
while(queue):
top = queue.pop(0)
num += 1
for next_ in adj[top]:
in_degrees[next_] -= 1
if in_degrees[next_] == 0:
queue.append(next_)
return num == numCourses