LeetCode 207. 课程表(广度优先遍历)

题目描述

现在你总共有 n 门课需要选,记为 0 到 n-1。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]
给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?

在这里插入图片描述

思路

详见链接

代码

from typing import List
from collections import deque

class Solution:
	def canFinish(self,numCourses:int,prerequisites:List[List[int]]) ->bool:
		clen = len(prerequisites)
		if clen == 0:
			return True
		in_degrees = [0 for _ in range(numCourses)]
		adj = [set() for _ in range(numCourses)]
		for second, first in prerequisites:
			in_degrees[second] += 1
			adj[first].add(second)
		queue = deque()
		for i in range(numCourses):
			if in_degrees[i] == 0:
				queue.append(i)
		counter = 0
		while queue:
			top = queue.popleft()
			counter += 1
			for successor in adj[top]:
				in_degrees[successor] -= 1
				if in_degrees[successor] == 0:
					queue.append(successor)
		return counter == numCourses
	

效果

在这里插入图片描述

发布了80 篇原创文章 · 获赞 239 · 访问量 7070

猜你喜欢

转载自blog.csdn.net/weixin_37763870/article/details/104524246