关于贪心算法介绍:
http://blog.youkuaiyun.com/mind_v/article/details/72956707
拓扑排序
问题描述
一个复杂的工程,经常可以分解成一组简单一些的任务,这些任务完成了,整个工程就完成了。例如汽车组装问题可以分解成:底盘安装、车轴安装、车轮安装、座位安装、喷漆、刹车安装、车门安装等。但是这些任务之间有个先后顺序,例如车轴安装之前先要进行底盘安装。
类似的问题,可以将任务和人物的先后顺序用有向图表示——称为顶点活动网络,顶点代表一个任务,有向边(i,j)代表任务i要在任务j之前完成。下图就是一个工程,它有6个任务,边(1,3)表示任务1要在任务3开始前完成,边(4,6)表示任务4要在任务6之前完成。
这样就形成了一个任务序列,对有向图的任意一条边(i,j),在这个序列中,任务i一定出现在任务j之前,具有这种性质的序列叫做拓扑序列(topological order),根据有向图建立拓扑序列的过程称为拓扑排序(topological sorting)。
对于这样一个有向图有若干个拓扑序列,如1-2-3-4-5-6,1-3-2-4-5-6,2-1-3-4-5-6等。
贪心求解
我们可以通过从左到右分步构造拓扑序列,每一步选择一个新顶点加入到序列中。选择新顶