`
lindexi-gd
  • 浏览: 140166 次
社区版块
存档分类
最新评论

拓扑排序

 
阅读更多

什么是拓扑排序

在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:

  1. 每个顶点出现且只出现一次。
  2. 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。

为什么要拓扑排序,假如我们有几个先修课程,有一些没有先修,有些课程之间有先后的关系,有些课程则可以并行的进行,那么我们使用拓扑排序可以得到我们需要修顺序

有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。

我们需要如何从一个有向图得到拓扑排序,其实简单,我们只需要循环寻找图中,任意一个没有入度的点,然后把它放到我们拓扑排序中的队列中,然后从图中删除这个点。继续循环寻找。循环直到图为空或找不到入度为0的点,第二种为图有环

另一方法是使用入栈DFS,深度优先搜索的出栈顺序

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    简单拓扑排序——源码

    拓扑排序是图论中的一个重要概念,主要应用于有向无环图(DAG,Directed Acyclic Graph)。在这样的图中,节点之间的关系是有方向性的,而拓扑排序就是找到一个线性的顺序,使得对于每一条边 (u, v),节点 u 都在这...

    拓扑排序关键路径算法C语言完整代码

    在计算机科学中,拓扑排序和关键路径算法是两种重要的图论概念,广泛应用于项目管理、任务调度等领域。本文将详细介绍这两个概念,并提供一个用C语言实现的完整代码示例。 **拓扑排序(Topological Sorting)** 拓扑...

    操作系统 拓扑排序算法

    任意给定一个有向图,设计一个算法,对它进行拓扑排序。拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出...

    AOV网与拓扑排序

    ### AOV网与拓扑排序:深入理解与C语言实现 #### AOV网(Activity On Vertex Network) AOV网络,即活动在顶点上的网络,是一种有向无环图(Directed Acyclic Graph, DAG),主要用于表示项目管理中的任务依赖关系...

    拓扑排序 整体 拓扑排序

    拓扑排序是图论中的一个重要概念,主要应用于有向无环图(DAG,Directed Acyclic Graph)。在计算机科学中,特别是在数据结构和算法领域,拓扑排序常常用于解决依赖关系的排序问题,例如课程安排、任务调度等场景。...

    数据结构拓扑排序课程设计.docx

    【拓扑排序】是图论中的一个重要概念,用于对有向无环图(DAG,Directed Acyclic Graph)进行线性排序。在这个过程中,我们尝试按照一定的顺序排列顶点,使得对于图中的每一条有向边 (u, v),顶点 u 总是出现在顶点 ...

    数据结构课设拓扑排序源代码(教学计划安排)

    拓扑排序作为一种在有向无环图(DAG)上进行排序的算法,它在处理具有依赖关系的任务调度问题中非常有用,比如教学计划的安排。通过将教学计划中的课程视为图的顶点,并根据课程之间的依赖关系来定义顶点间的有向边...

    图的最短路径、拓扑排序和关键路径

    "图的最短路径、拓扑排序和关键路径" 图的最短路径是图论中的一种重要概念,它是指从图的一顶点到另一顶点的路径中,所经过的边的数目最少的那条路径。这种路径也可以称作最短距离或最短路径长度。在无权图中,图的...

    数据结构课程设计——拓扑排序和关键路径

    数据结构课程设计中,拓扑排序和关键路径是两个重要的概念,它们在计算机科学和工程领域,尤其是在项目管理和网络优化中具有广泛的应用。 拓扑排序是对有向无环图(DAG,Directed Acyclic Graph)的一种线性排序,...

    c语言实现图的拓扑排序

    拓扑排序是对有向无环图(DAG,Directed Acyclic Graph)的一种线性排序,它使得对于图中的每一条有向边 (u, v),节点 u 的排序位置总是在节点 v 之前。在实际应用中,例如课程安排、项目依赖关系解决等场景,拓扑...

    数据结构课程设计 图的遍历和拓扑排序

    本次课程设计的重点是“图的遍历”和“拓扑排序”,这两个主题都是图论在数据结构中的具体应用。 **图的遍历** 图是由顶点(vertices)和边(edges)构成的数据结构,用于表示对象之间的关系。在图的遍历中,我们...

    数据结构之AOV网的拓扑排序算法

    在提供的源代码`AOV网的拓扑排序算法.c`中,你可以期待看到关于这些步骤的实现,包括数据结构的定义(如顶点和边)、邻接表的构建、入度计算、以及拓扑排序的函数。代码注释会帮助理解每一部分的功能。 输入示意图`...

    拓扑排序和关键路径课设

    ### 拓扑排序与关键路径的实现及应用 #### 1. 拓扑排序的概念及应用 拓扑排序是一种特殊的线性排序方法,它适用于有向无环图(Directed Acyclic Graph, DAG),其主要目的是确定一个图中各顶点的线性顺序,使得...

    VC++拓扑排序算法

    拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)处理中非常实用。VC++是一种强大的编程语言,它提供了丰富的库支持来进行各种算法的实现,包括拓扑排序。在本教程中,我们将...

    有向图的拓扑排序

    对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。

    图 拓扑排序 深度搜索 广度搜索 最小生成树

    在这个主题中,我们将深入探讨“图”的核心概念,以及与之相关的拓扑排序、深度优先搜索(DFS)、广度优先搜索(BFS)和最小生成树(Minimum Spanning Tree, MST)。 首先,**图** 是由节点(也称为顶点)和边组成...

    图的拓扑排序和有向无环图的判断

    图的拓扑排序和有向无环图(Directed Acyclic Graph, DAG)的判断是图论中的基础概念,广泛应用于计算机科学的多个领域,如任务调度、编译器设计等。拓扑排序是对有向无环图进行线性排列的一种方式,而DAG的环检测则...

    拓扑排序(C语言原代码)

    拓扑排序是图论中的一个概念,用于有向无环图(DAG,Directed Acyclic Graph)的排序。在这个场景下,拓扑排序是将所有顶点排成一个线性序列,使得对于每一条有向边 (u, v),顶点 u 在序列中都出现在顶点 v 之前。在...

    拓扑排序的演示

    拓扑排序是图论中的一个重要概念,特别是在有向无环图(DAG,Directed Acyclic Graph)中。在这个课程设计中,我们很可能涉及到如何通过编程实现拓扑排序的方法,这通常用于解决任务调度、依赖关系排序等问题。让...

Global site tag (gtag.js) - Google Analytics