我正在研究以下问题的算法:
我们有一定数量的课程,每门课程都有我们的先决条件。找到最长的课程序列,使得序列中的每门课程,前一课程都是先决条件。
我知道这显然是拓扑排序会派上用场的问题,但我对算法和实现有些困难。对于算法,我首先想到的是我们应该能够运行一个标准的拓扑排序算法,并且当我们“看到”它时,只需保留一个计数器,该计数器计算一个课程是否为pre-req。
我已经决定最好将图表表示为邻接列表。这里有一个粗略的概念,我到目前为止的实施情况,
public Vertex{
private String courseName;
private Vertex[] edges; //Represents all of this courses pre-reqs.
public addEdge(Vertex v); //Add's a pre-req
public getEdges(); //Returns array of edges
public getEdge(int index);//Return edge at specific index
}
然后在主程序中,“图形”将只是一个顶点数组:
Vertex graph[] = new Vertex[num];
如果有人对算法或实现有任何想法,链接,提示等,请随时分享。我的目标是O(n + m)时间,其中n是课程数,m是预先要求的数量。