只存在于有向无环图(DAG)中
该序列必须满足
- 每个顶点出现且只出现一次。
- 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
实现
- 寻找一个入度为0的顶点并输出
- 删除该点,并删除所有以该点为起点的有向边(即将该点连接的所有点入度减一)
- 重复1和2,直到图为空为止
代码
1
2
3
4
5
6
7
8
9
10
11
12for(int i = 0;i<n;i++){
//寻找入度为0的点加入队列
if(in_[i] == 0) q.push(i);
}
for(int i = 0;i<q.size();i++){
//将队列中每一个入度为0的点可以到达的点的入度-1
l[i] = q.front();
for(int j = head[l[i]];j;j = nxt[j]){
in_[to[j]]--;
if(in_[to[j]] == 0) q.push(to[j]);
}
}