拓扑排序算法分析(通俗易懂)

拓扑排序(其实是一种依赖关系):对于有向且无环的图来说,当前这个节点的依赖来其之前已经完成了。

下面附上一个图让大伙更好的理解:


比如这个图:B需要依赖A才能完成,A需要依赖C和D才能完成,而D需要依赖F才能完成,画出图就如上所示:

而最终的拓扑排序序列则为:FDCAB(不难发现,入度最小的先遍历)


基本思想:

1. 先把入度为0 的节点找到并打印

2. 删掉入度为0的节点,继续循环1的步骤,直至图为null。


基本思想是很简单的,下面是程序实现流程:

1. 定义一个队列和一个HashMap(HashMap用来存储Node节点和该节点入度的值);

2. 遍历所有的节点,把所有的节点的入度和node值存放到HashMap中去,并将入度为0的节点存放到队列queue中去;

3.定义一个List数组,用来存放Node,并作为最后的节点输出 ;

4. 取出队列中的一个元素,并将该元素添加到result数组中 ;

5. 遍历上面取出的元素的next节点,将其所有next节点的入度都-1 如果有一些节点的入度变为0时,把他们放进去队列queue里面; 而如果上面取出的元素没有next的话,继续从队列queue中poll()出新的元素

(建议大家按照程序一起看,容易理解一些)下面附上程序源码:


喜欢的记得点个赞哦~

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值