#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:
图的拓扑排序(C++实现)
最新推荐文章于 2024-08-24 20:34:16 发布
本文详细介绍了如何使用C++实现图的拓扑排序算法。通过深度优先搜索(DFS)或广度优先搜索(BFS)遍历无向图,并确保没有环路,将节点按层次顺序排列。
摘要由CSDN通过智能技术生成