与拓扑第一次相遇是在大一下学期,那时候觉得拓扑很单纯很好懂。但是时隔一年以后,在天梯赛再遇拓扑时却是形同路人,那么陌生。我对拓扑情感尚在,因此在此文中记录拓扑,以表忠心!
瞎扯时间已经过去,下面进入正题。
什么是拓扑排序?
拓扑排序就是按照一种规则进行排序,并且只有有向无环图才能进行拓扑排序,一个有向无环图可能有多种
排列结果。
那么规则是?
拓扑排序就是根据有向无环图中的关系进行排列,其中父节点排在子节点前面。
(节点1指向节点2,则节点1是父节点,节点2是子节点)
拓扑排序已经很显然了,下面将说明怎么用代码进行拓扑排序。
- 任取一个入度为零的节点入队,如果没有则结束
- 在图中删除入队节点,以及关联的边。
- 对所有子节点的入度减一
- 递归操作剩下的所有节点
这就是拓扑排序的过程,若最后入队节点少于n, 则说明该图不是有向无环图。对于拓扑排序的理解就这么多,更多详情见一位前辈的文章<< 深入理解拓扑排序(Topological sort) >>