[leetcode---bfs] 课程表-拓扑排序

本文探讨了课程依赖关系下的拓扑排序问题,通过BFS算法实现无环检测,确保课程学习顺序合理。分析了算法步骤,包括初始化入度数组和邻接表,以及迭代更新入度直至所有课程可被安排。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值