目录
一、实验目的和要求
设计算法并实现有向无环图的所有拓扑序列。
二、实验环境
软件环境:visual stdio 2017
硬件环境:①CPU:Intel(R)Core(TM)i7-8565U CPU @1.80Ghz
②内存:8.0GB
三、实验内容
设计算法并实现有向无环图的所有拓扑序列。
四、实验过程
4.1 任务定义和问题分析
问题拆分:
1°以邻接链表为存储结构,对有向无环图进行类的封装
2°输入点、边信息,对输入信息进行检测,判断是否为无环图
3°设计递归回溯的拓扑排序算法,输出所有拓扑序列
4.2 数据结构的选择和概要设计
采用的数据结构:自行设计的邻接链表与DAG有向无环图类,STL中的stack与vector。
4.3 详细设计
主要函数设计:
1°DEL函数:对动态分配的内存进行delete,delete的内容有邻接链表,入度动态数组。
2°无环图判断函数:基于栈利用非递归的方法尝试获取一个拓扑序列,若序列长度与结点数相同,则返回true。
3°构造函数:输入信息进行初始化工作,并检查是否为无环图,若非无环图,则先调用DEL函数,再通过goto语句重新输入。
4°析构函数:调用保护成员DEL函数,进行所有动态分配内存的delete。
5°拓扑排序函数:采用递归回溯的方法,输出所有拓扑序列
算法设计:采用string型vector储存每个结点的data值,对结点进行for循环遍历,若探寻到入度为0的点,则对其所有邻结点进行入度-1的操作,并将该点push进vector。递归调用拓扑排序函数。接下来的代码部分便是回溯之后执行的操作:对所有邻结点进行入度+1的操作,并对vector进行pop操作。即对递归前的操作进行取消,这样是为了使本次获取一个拓扑序列的操作不影响到其他拓扑序列的获取。递归出口为