拓扑排序(其实是一种依赖关系):对于有向且无环的图来说,当前这个节点的依赖来其之前已经完成了。
下面附上一个图让大伙更好的理解:
比如这个图: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()出新的元素
(建议大家按照程序一起看,容易理解一些)下面附上程序源码:
喜欢的记得点个赞哦~