拓扑排序

本文介绍了拓扑排序的概念,即在有向图中进行节点排序,确保没有节点指向其前面的节点。通过统计并处理入度为0的节点,逐步完成排序。当无法找到入度为0的节点时,表明图中存在环,拓扑排序无法进行。文章还提到了拓扑排序的算法模板和使用前向星的数据结构进行操作。
摘要由CSDN通过智能技术生成

在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。

先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。

一直做改操作,直到所有的节点都被分离出来。

如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。

下面是算法的演示过程。

在这里插入图片描述
模板

vector

//重环无影响
const int maxn = 1e5 + 7;
std::vector<int> G[maxn];
queue<int>q;
priority_queue <int,vector<int>,less<int> > p;
priority_queue <int,vector<int>,greater<int> > q;
bool topsort(){
   
    while(!q.empty()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值