图的拓扑排序(C++实现)

本文详细介绍了如何使用C++实现图的拓扑排序算法。通过深度优先搜索(DFS)或广度优先搜索(BFS)遍历无向图,并确保没有环路,将节点按层次顺序排列。
摘要由CSDN通过智能技术生成
#ifndef TOPO_H
#define TOPO_H

#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<queue>
#include<algorithm>
#include<limits.h>
#include"../data_struct/data_struct.h"

/// 拓扑排序
/// 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序
/// 是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前
/// 我们把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网
/// 一个AOV网应该是一个有向无环图,即不应该带有回路,因为若带有回路,则回路上的所有活动都无法进行(对于数据流来说就是死循环)。
/// 在AOV网中,若不存在回路,则所有活动可排列成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,
/// 我们把此序列叫做拓扑序列(Topological order),由AOV网构造拓扑序列的过程叫做拓扑排序(Topological sort)。
/// AOV网的拓扑序列不是唯一的,满足上述定义的任一线性序列都称作它的拓扑序列。
/// 二者的复杂度均为O(V+E)
class graph_topo
{
public:
    /// Kahn(卡恩)算法:我们先使用一个栈保存入度为0 的顶点,然后输出栈顶元素并且将和栈顶元素有关的边删除,
    /// 减少和栈顶元素有关的顶点的入度数量并且把入度减少到0的顶点也入栈
    static bool kahn(const std:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值