问题描述如下:
某学院有n门课程,(i,j)表示i是j的先行课,即课程i必须在课程j之前的学期开设。对任意给出的先行课集合S={(1,3),(2,4)......},至少需要安排多少个学期?给出每个学期所开的课程清单。
这是一个拓扑图,我用的是贪婪求解:
存储课程用的是邻接数组,存储已找到的点的结构用的是栈stack<int> ss,存储每个点入度用的是数组indegree[];每次在所有没有选择的顶点中选择一个顶点W,它没有这样的入边(V,W),其中V不在ss中;
每学期遍历一次,把所有存进栈里的点输出,即为当前学期所要开设的课程。更新indegree,清空栈,重复操作,直到所有的点已被输出;
以下是代码:
#