在施工流程图或产品生产的流程图中,根据施工项目的顺序和产品生产顺序排序的过程,即拓扑序列。有向无环图的拓扑序列指的是:图中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
拓扑排序
最新推荐文章于 2024-08-14 23:42:33 发布
本文介绍了拓扑排序的概念及其在有向无环图(DAG)中的应用。通过邻接表存储有向图,并使用入度数组来跟踪节点的入度。文章详细展示了两种拓扑排序的算法:一是利用栈处理入度为零的节点,二是通过深度优先遍历。实验证明,这两种方法的时间复杂度均为O(n + e),在处理大规模数据集时表现出良好的性能。
摘要由CSDN通过智能技术生成