一、基础知识

1、AOV-网 (Activity On Vertex Network):用顶点表示活动,用弧表示活动之间的优先关系的有向无环图。

2、AOE-网 (Activity On Edge Network):用顶点表示事件,用边表示活动,带权的有向无环图。

3、拓扑排序:将AOV-网中所有顶点排成一个线性序列(顶点  到  顶点有一条路径,则该线性序列中  一定在  之前)

二、拓扑排序算法思想

1、在AOV-网中选取一个无前驱的顶点,并输出

2、从图中删除所有该顶点发出的有向边

3、重复1,2,直至

  全部顶点已输出,拓扑排序已完成。

  已经跳出循环,但是图中还有顶点,说明图中存在环。

三、算法实现

①求出个顶点的入度存入indegree数组,并将入度为0的顶点入栈。

②只要栈不空

  将栈顶元素保存在topo数组

  并将   顶点的每个邻接顶点的入度减1,如果此时有入度为0的点,则放入栈中

③无环结束,返回OK

有环,返回ERROR

 1 Status TopologicalSort(ALGraph G, int topo[])    //有向图用邻接表存储
 2 {
 3     //若G无回路,则生成G的一个拓扑序列topi[]并返回OK,否则返回ERROR
 4     FindInDegree(G, indegree);                  //求出各顶点的入度,存放在数组indegree中
 5     InitStack(S);                                //初始化栈S
 6     for(int i=0; i<G.vexnum; i++){             //遍历indegree,将入度为0的顶点压入栈中
 7         if(indegree[i] == 0){
 8             Push(S, i);
 9         }
10     }
11     m=0;
12     while(!StackEmpty(S)){
13         int i=0;
14         Pop(S, i);                               //将栈顶元素出栈
15         topo[m]=i;                               //存入topo序列中
16         ++m;
17         p=G.vertices[i].firstarc;                //将P指向  的邻接点
18         while(p){                                //遍历的出度表,将其中存在顶点的入度减1
19             k=p->adjvex;
20             --indegree[k];
21             if(indegree[k] == 0){                //若入度为0,压入栈
22                 Push(S, k);
23             }
24             p=p->nextarc;
25         }
26     }
27     if(m<G.vexnum) return ERROR;
28     else return OK; 

转载于:https://www.cnblogs.com/lollipop-25/p/9994063.html

数据结构-图的应用-拓扑排序相关推荐

  1. 【数据结构-图】4.拓扑排序和关键路径(注解+原理)

    一.拓扑排序 1.1 基本知识 有向无环图:一个有向图中不存在环,简称DAG图 AOV网:用DAG图表示一个工程,其顶点表示活动,用有向边 <Vi,Vj><V_i, V_j>& ...

  2. 【数据结构】AOV网——拓扑排序

    相关概念 AOV网 AOV网(Activity On Vertex Network)用顶点表示活动.边是无权的,仅仅用来表示前驱与后继关系. 前驱与后继 有向边的起点称为终点的前驱,有向边的终点称为起 ...

  3. 图论--拓扑排序--判断一个图能否被拓扑排序

    拓扑排序的实现条件,以及结合应用场景,我们都能得到拓扑排序适用于DAG图(Directed Acyclic Graph简称DAG)有向无环图, 根据关系我们能得到一个线性序列,实现的方式是DFS,具体 ...

  4. (数据结构)有向图的拓扑排序 Kahn算法

    拓扑排序是对有向无圈图的顶点的一种排序,使得如果存在一条从vi到vj的路径,那么在排序中,vi必须出现在vj的前面. 首先,我们需要准备一个vector<int> link[maxn],l ...

  5. java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

  6. 有向无环图的所有拓扑排序

    有向无环图的所有拓扑排序 对有向无环图DAG的拓扑排序是顶点的线性排序,从而使每一有向边[u,v][u,v][u,v],顶点u进来的顺序v在.如果图不是 DAG,则无法对图进行拓扑排序. 给定一个 D ...

  7. 图综合练习--拓扑排序_03 数据结构与算法 - 排序

    1. 冒泡排序 Bubble Sort 基本思想 给定一个数组,这些元素将通过相互之间的比较,按照大小顺序一个个地像气泡一样浮出水面 实现 每一轮,从头部开始,每两个元素比较大小进行交换,直到这一轮中 ...

  8. 数据结构——AOV图与算法——拓扑排序

    AOV图:以有向图中的顶点来表示活动,以有向边来表示活动之间的先后次序关系. 拓扑排序:对一个有向无环图(AOV)进行活动先后的排序方法 拓扑排序思路: 1.统计所有节点的入度 2.把所有入度为0的节 ...

  9. 【数据结构】什么是拓扑排序—关于图的拓扑排序

    目录 一.什么是拓扑排序? 二.拓扑排序:基本概念 三.拓扑排序:分析 四.拓扑排序:步骤 五.拓扑排序:实现 六.练习 一.什么是拓扑排序? 对一个有向无环图(Directed Acyclic Gr ...

  10. 图综合练习--拓扑排序_拓扑排序

    一个场景 在大学里,每当到了期末的时候,你一定会头疼于选课给你带来的困扰.其中一项就是先修课的问题,每次你高高兴兴地选了自己心仪的选修课时,却发现自己不满足先修课的要求,只好默默地退掉.到底怎样安排我 ...

最新文章

  1. mysql命令行显示乱码_mysql命令行显示乱码的解决方法
  2. 比特币再度遭遇资金“大逃离” 后市前景愈发摇摇欲坠
  3. 数据结构与算法基础知识集锦
  4. 学习笔记(52):Python实战编程-Radiobutton
  5. 信息学奥赛一本通 1137:加密的病历单 | OpenJudge NOI 1.7 12
  6. Guava链式风格Ordering比较器实例
  7. Android桌面组件开发之实时文件夹(Live_Folders)
  8. IPv6 HSRP协议
  9. 常用的基础英文字体推荐
  10. android cts问题分析,一则CTS测试错误分析
  11. 服务器3D场景建模(五):体素场景(三)
  12. 苹果电脑无法使用wi-fi_使用频率更高的Wi-Fi频道是否更好?
  13. Re:从零开始的程序猿生活
  14. Angular防抖指令——输入事件
  15. excel一个表格分成多个怎么做?
  16. Spring的基础知识精讲,创客学院一招教你彻底掌握
  17. 网易数帆云原生故障诊断系统实践与思考
  18. (自适应手机端)pbootcms响应式企业通用网站模板
  19. superword中一次精彩的重构
  20. 敏捷开发模式 与 TDD 的思考总结

热门文章

  1. php中的加密解密模块-mcrypt
  2. notepad++自动补全括号
  3. 弹窗编辑jsp报表内数据
  4. oracle 聚合函数 LISTAGG ,将多行结果合并成一行
  5. Consider defining a bean of type ‘com.bsj.system.service.RedisService‘ in your configuration.
  6. PdfJS使用的一些说明
  7. 归并排序MergeSort
  8. httpclient java多线程_Apache HttpClient4.5多个HTTP请求使用多线程执行
  9. 用c语言编写成绩单由高到低,C语言程序设计实验.doc
  10. miui11精简_MIUI11评测:真的是缺乏创新吗?