拓扑排序
2015-08-23 20:45
239 查看
在大学里面,我们要学习很多种类的课程,其中有一些课程必须以另一种课程为基础,我们怎么样安排课程才能保证学每一门课的时候它的前驱课程都上过?
要保证课程不会发生冲突(每一门课都必须安排在它的前驱课程之后),就要找出最前面的课程,安排这些课程先上。
如果我们用结点表示课程任务,箭头表示先后关系,那么我们可以得一个有向图。我们怎么才能将这些课程排成一个序列呢?这个序列要保证箭头左边的点不会出现在箭头右边点的前面。
解决的办法其实很简单
1、在有向图中选一个没有前驱的顶点且输出之。
2、从图中删除所有以它为尾的弧。
3、重复上述两步,直到全部顶点已经输出,或者是当前图中不存在无前驱的顶点为止。后一种情况则说明图中有环存在。
具体例子看链接:hdoj 1285,代码加解释!
有矩阵,邻接表,队列,三种写法!
要保证课程不会发生冲突(每一门课都必须安排在它的前驱课程之后),就要找出最前面的课程,安排这些课程先上。
如果我们用结点表示课程任务,箭头表示先后关系,那么我们可以得一个有向图。我们怎么才能将这些课程排成一个序列呢?这个序列要保证箭头左边的点不会出现在箭头右边点的前面。
解决的办法其实很简单
1、在有向图中选一个没有前驱的顶点且输出之。
2、从图中删除所有以它为尾的弧。
3、重复上述两步,直到全部顶点已经输出,或者是当前图中不存在无前驱的顶点为止。后一种情况则说明图中有环存在。
具体例子看链接:hdoj 1285,代码加解释!
有矩阵,邻接表,队列,三种写法!
相关文章推荐
- 多线程在python中的使用 threading
- 【LeetCode】(73)Set Matrix Zeroes(Medium)
- iOS开发中个人调试的几种方法
- (2.1.20)java中的进程
- Basic Calculator II
- ROM、SDRAM、RAM、DRAM、SRAM、FLASH 的区别
- 哪个效率更高?x=x+1, x+=1, x++
- Oracle 游标使用全解
- 数据结构之---C语言实现拓扑排序AOV图
- android 手势识别(一)
- Deep Learning及NLP(自然语言处理)杂谈--第三部分
- Deep Learning及NLP(自然语言处理)杂谈--第二部分
- 黑马程序员 --- OC中的类
- 【BZOJ1212】【HNOI2004】L语言
- ThinkPHP3.1.3部署到SAE 教程
- CCActionGird3D源码解析
- Linux 经常使用 性能 检测 命令 说明
- HDU 4407 Sum(容斥原理)
- POJ 1321 棋盘问题(深搜)
- [GDOI模拟2015.08.18]解密