【数据结构】实验报告12 输出有向无环图的所有拓扑序列

这篇实验报告详细介绍了如何设计和实现有向无环图(DAG)的所有拓扑序列。实验中,使用邻接链表作为存储结构,通过类封装实现了DAG,利用递归回溯算法输出所有拓扑序列。实验环境为Visual Studio 2017,硬件环境包括Intel Core i7-8565U CPU和8GB内存。实验过程中,设计了包括无环图判断、内存释放、构造和析构等函数,确保了算法的正确性和内存管理的有效性。测试结果显示,算法能够正确地输出所有拓扑序列,加深了作者对递归回溯算法的理解。
摘要由CSDN通过智能技术生成

一、实验目的和要求

设计算法并实现有向无环图的所有拓扑序列。

二、实验环境

软件环境: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操作。即对递归前的操作进行取消,这样是为了使本次获取一个拓扑序列的操作不影响到其他拓扑序列的获取。递归出口为࿰

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值