问题描述:
拓扑排序(Topological sort)是指把有向无环图(Directed Acyclic Graph,简称DAG)中的顶点排列为一个线性序列,对于任意两个顶点u和v,如果存在从顶点u到顶点v的通路,那么在线性序列中u必然在v之前。
拓扑排序算法步骤为:1)从图中选择一个入度为0的顶点(如果有多个的话就任选一个),输出该顶点,如果没有入度为0的顶点则算法结束;2)从图中删除刚输出的顶点以及该顶点的所有出边,然后跳转到第1步。算法结束后如果输出的顶点数量小于图中顶点数量,则图中必然存在回路。容易得知,拓扑排序的结果有可能不是唯一的。
参考代码:
运行结果: