刷题方法:拓扑排序之 BFS+DFS

以你之姓@ 2023-10-01 12:33 96阅读 0赞

BFS (广度优先,遍历到每个节点的时候,先处理这个节点的所有相邻节点)

核心逻辑为判断所有节点的最终入度为0

1:统计图中每个节点的入度,生成 入度表 indegrees。
2:借助一个队列 queue,将所有入度为 00 的节点入队。
3:当 queue 非空时,依次将队首节点出队,在课程安排图中删除此节点 pre:
4:并不是真正从邻接表中删除此节点 pre,而是将此节点对应所有邻接节点 cur 的入度 -1−1,即 indegrees[cur] -= 1。
5:当入度 -1−1后邻接节点 cur 的入度为 00,说明 cur 所有的前驱节点已经被 “删除”,此时将 cur 入队。
6:在每次 pre 出队时,执行 numCourses—;
若整个课程安排图是有向无环图(即可以安排),则所有节点一定都入队并出队过,即完成拓扑排序。换个角度说,若课程安排图中存在环,一定有节点的入度始终不为 0。
因此,拓扑排序出队次数等于课程个数,返回 numCourses == 0 判断课程是否可以成功安排。

核心数据结构:

邻接表 [ [] for i in range(point)] 每个节点的依赖节点

入度表 [0 for i in range(point)] 每个节点的入度值

  1. class Solution(object):

发表评论

表情:
评论列表 (有 0 条评论,96人围观)

还没有评论,来说两句吧...

相关阅读

    相关 拓扑排序

    什么是拓扑排序? 在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序

    相关 经典算法拓扑排序

    定义: 把AOV网(用定点表示活动,用弧表示活动间优先关系的有向图)络中各个顶点按照它们互相之间的优先关系排列成一个线性序列的过程叫做拓扑排序。 方法: 1.

    相关 拓扑排序

    拓 扑 排 序 一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就

    相关 拓扑排序

    (1)有向无环图 无环的有向图,简称 DAG (Directed Acycline Graph) 图。 有向无环图在工程计划和管理方面的应用:除最简单的情况之外,几

    相关 拓扑排序

    拓扑排序: 拓扑排序是根据离散数学中有关偏序与全序定义的。 ![0_1314168765l7fq.gif][] 若一个集合 X 上的关系 R 是自反的 反

    相关 拓扑排序

     一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程