#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int h[100000*2+10],nex[100000*2+10],to[100000+10],con=1,n;
int et[100000+10];
void bfs()
{
queue<int>q;
vector<int>ans;
for(int i=1;i<=n;++i)
if(!et[i])//将入度为0的点加入队列
{q.push(i);ans.push_back(i);}
while(!q.empty())
{
int now=q.front();q.pop();
for(int i=h[now];i;i=nex[i])
{
if(et[to[i]])
{
et[to[i]]--;//在图中删除该点使入度--
if(!et[to[i]])//产生新的入度为0的点
{
q.push(to[i]);
ans.push_back(to[i]);
}
}
}
}
if(ans.size()==n)//拓扑序列元素个数等于所有点数
{
cout<<ans[0];
for(int i=1;i<ans.size();++i)
printf(" %d",ans[i]);
有向图的拓扑序列
最新推荐文章于 2022-12-07 14:09:18 发布
本文深入探讨了有向图的拓扑序列概念,详细解释了如何通过深度优先搜索(DFS)和广度优先搜索(BFS)进行拓扑排序,并提供了具体的算法实现示例,帮助读者理解这一图论中的关键概念。
摘要由CSDN通过智能技术生成