拓扑排序:是一个有向无环图。拓扑排序_百度百科
图解分析拓扑排序:(照片来源于青岛大学王卓老师网课)
如果你想学习C2(离散数学)的内容,那么你就要有C1(程序设计基础)的基础,学C12(数值分析)的内容,你要有C1(程序设计基础)和C9(高等数学)的基础........
那么要怎么写程序来表示需要哪些基础才可以学哪些内容呢,这就利用到了拓扑排序。
下面我以我自己的例子进一步说明:
①代码的入手点就是谁的入度为0,在图中很快就可以看出A和D的入度为0
②将入度为0的顶点入栈
③将与入栈顶点有边的顶点入度减1,也就是将A入栈之后,需将B和C的入度减1
依次循环
代码如下:
剖析代码:
红色方框除外,剩下的代码就是十字链表创建的代码,接下来主要分析红色方框的内容
这是Toposort函数的部分代码,主要作用是将入度为0的顶点入栈和出栈操作。
解析:Indegree数组的作用是用来记录各个顶点的入度。
一开始所有顶点的入度为:依次为A-H的入度
①将A和D入度为0的顶点入栈
②将D Pop出来
此时的入度为:
③如果没有入度为0的顶点,那就继续将A Pop出来
各个顶点入度为:
循环上面的步骤:
将入度为0的C入栈......,直到Pop出来的顶点数等于6,也就是全部都Pop出来
计算入度的相关函数: