【LeetCode】课程表(图论判环 拓扑排序/dfs)

课程表( 拓扑排序/dfs 判环)

题目链接:https://leetcode-cn.com/problems/course-schedule/

题目大意:给定一个课程依赖关系图,比如课程A依赖课程B,课程B依赖课程C,按照上述的依赖关系,能否学习完所有的课程?

先学C,再学B,最后学A即可

方式1:拓扑排序

我们按照图论的思想,将每个课程看做一个节点,将课程间的这种依赖和被依赖的关系看做节点的出度和入度,即

依赖:出度

被依赖:入度

样例如下

A依赖B等价于A节点指向B节点,那么A节点的出度是1,B节点的入度是1

A依赖D等价于A节点指向B节点,那么A节点现在的出度是2,D节点的入度是1

我们首先找到所有入度为0的节点,即这些节点不被任何节点依赖,我们可以先完成这些课程nums1,这些课程被完成后,依赖这些课程的节点nums2其入度也需要被修改,具体的修改操作为nums2节点的入度都需要减去1,因为nums1节点课程都完成了

然后我们继续选取入度为0的点,直到没有入度为0的点

对于这些入度为0的点的存储我们可以采用队

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值