拓扑排序

来源:互联网 发布:广电直播软件 编辑:程序博客网 时间:2024/06/06 01:21

在大学里面,我们要学习很多种类的课程,其中有一些课程必须以另一种课程为基础,我们怎么样安排课程才能保证学每一门课的时候它的前驱课程都上过?

                      

要保证课程不会发生冲突(每一门课都必须安排在它的前驱课程之后),就要找出最前面的课程,安排这些课程先上。

        


       如果我们用结点表示课程任务,箭头表示先后关系,那么我们可以得一个有向图。我们怎么才能将这些课程排成一个序列呢?这个序列要保证箭头左边的点不会出现在箭头右边点的前面。

           解决的办法其实很简单
1、在有向图中选一个没有前驱的顶点且输出之。
2、从图中删除所有以它为尾的弧。


3、重复上述两步,直到全部顶点已经输出,或者是当前图中不存在无前驱的顶点为止。后一种情况则说明图中有环存在。

       

    具体例子看链接:hdoj 1285,代码加解释!  

   有矩阵,邻接表,队列,三种写法!

1 0
原创粉丝点击