拓扑排序-C语言详解

拓扑排序:是一个有向无环图。拓扑排序_百度百科

图解分析拓扑排序:(照片来源于青岛大学王卓老师网课)

如果你想学习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出来 

计算入度的相关函数:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值