拓扑排序
拓扑序就是后边走的点有前边的先决条件
上图就是个拓扑序 学数据结构之前必须先学习c语言 以此类推
学习顺序可以是
- c语言 数据结构 python 面向对象 c++ linux 网、系统 分布式项目
- c语言 linux 数据结构 网、系统 python 面向对象 c++ 分布式项目
- …
拓扑序不唯一
拓扑排序不能有环,有环就不行了
- 入度:有几条边的终点是该点
- 出度:有几条边的起点是该点
- 度 = 出度 + 入度
拓扑排序流程:
- 求入度
- 看入度为零的点为起点
- 从起点遍历能到达的点 将能到达的点的边删掉 使后边的点的入度为0
- 将入度为零的点放入队列
- 将序列走一遍 重复3.4 走完的顺序即位拓扑序
- ps:当要求拓扑序从大到小或者从小到达时可以将queue改为priority_queue
eg:
- 统计入度
入度为零为起点
- 从起点往后走 能到达的点的入度减一 当点的入度为0 加在队列中
- 将队列中的点都走一遍 走完的点的顺序即位答案顺序
//topo 字典序最小
#include<iostream>
using namespace std;
#include<cstring>
#include<queue>
//链式前向星存边
struct edge{
int to, next;