在施工流程图或产品生产的流程图中,根据施工项目的顺序和产品生产顺序排序的过程,即拓扑序列。有向无环图的拓扑序列指的是:图中v1到v2有一条边,那么在拓扑序列中v1在v2之前,对于所有的顶点和边都适用。下面介绍两种求拓扑序列的方法: (1)在有向图中选择一个没有前驱的顶点输出。 (2)从图中删除该顶点和所有以它为尾的弧。 重复上述过程,直至全部的顶点输出,或者当前图中不存在无前驱的顶点为止。后一种情况说明该图是带环的。用这种方法可以判断有向图是不是有向无环图。我们采用邻接表作为有向图的存储结构,我们设置一个indegree数组,数组中存储当前节点的入度数。入度为零的顶点即为没有前驱的顶点,为了避免重复检测入度为零的顶点,可另设置一个栈暂时存所有入度为零的顶点。 对于有n个顶点和e条边的有向图而言,建立各个顶点入度的时间复杂度为o(e);建立零入度顶点栈的时间复杂度为o(n);在有向无环图中,则每个顶点入栈一次,出栈一次,入度减一的操作在while循环中总共执行了e次所以总的时间复杂度为o(n + e)。#include<iostream> #include<vector> #include<fstream> #include<time.h> #include<stack> using namespace std; stack<int> s;//定义一个栈 void readGraph();//读取文件,存储图 void findIndegree();//初始化每个顶点的入度 void topSort();//拓扑排序的函数 int nodeNum;//图中顶点数 int edgeNum;//图中边数 vector<vector<int>> mGrap
拓扑排序
最新推荐文章于 2022-07-12 21:36:19 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)