算法导论 22.4 拓扑排序

拓扑排序是对有向无环图的线性排序,确保在图中的顺序关系得到保持。常见应用如穿衣顺序。算法通过深度优先搜索计算结点结束时间,然后按逆序排列。具体步骤包括:DFS计算结点结束时间、按结束时间插入队列、返回队列。时间复杂度为O(V+E),其中V是结点数,E是边数。提供了拓扑排序的代码实现,使用DFS并借助队列完成。
摘要由CSDN通过智能技术生成

一,拓扑排序的思想

        拓扑排序是利用深度优先搜索对有向无环图进行线性排序,即对于一个图G进行拓扑排序后,所有结点按线性排放,凡是在图G中u在v前面,拓扑排序后u也一定在v前面。

        常见的拓扑排序的应用比如早上穿衣的顺序,袜子必须在穿鞋前穿好,领带必须在衬衫穿好后才能戴。

二,拓扑排序算法介绍

        我们对有向无环图进行DFS操作,并将结点按结束时间逆序线性排列

三,拓扑排序伪代码

TOPLOGICAL_SORT(G)

1. call DFS(G) to compute finishing times v.f for each vertex v

2. as each vertex is finished,insert it onto the front of a linked list

3. return the linked list of vertices

总共就三步,先对图G进行DFS,然后每当一个结点被访问完毕(标为黑色),将他放到一个队列的最前端,即先访问完的结点一个在队列最后,最后返回这个队列

四,拓扑排序的复杂度

时间复杂度:

        拓扑排序的时间复杂度就是DFS的时间复杂度,即O(V+E)

五,拓扑排序的代码

首先是拓扑排序,创建了一个队列,将他传给DFS,最后返回该队列

deque<Node *> TOPOLOGICAL_SORT(Graph * graph)//拓扑排序
{
	deque<Node
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值