1. 拓扑排序算法:将一个有向无环图的所有顶点生成一个线性的序列,来表示图中顶点之间的先后关系。(必须是有向无环图,也就是说必须有入度为零的点)
2. 关键技术
a. BFS算法
b. 队列或队栈:入度为0 的结点先入队/入栈,对首元素出队/出栈。
3. 示例
4. 代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>g[100];
int rudu[100]; //记录每个节点的入度
queue<int>q;//队列,存储入度为0的节点
void topSort()
{
//初始化:入度为0的节点入队
for(int i=1;i<=n;i++)
{
if(rudu[i]==0)
{
q.push(i);
}
}
//BFS的入队和出队操作
while(!q.empty())
{
int u=q.front();
q.pop();
cout<<u<<" ";
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
rudu[v]--;
if(rudu[v]==0)
{
q.push(v);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
rudu[v]++;
}
topSort();
return 0;
}