拓扑排序图 - 查找没有后继的所有顶点

时间:2013-05-11 23:49:50

标签: java topological-sort

我正在做一个项目,我正在使用拓扑排序找到基于先决条件的逻辑课程序列。这是我的排序方法:

public void topo()  //topological sort
{
    int orig_nVerts = nVerts;  //remember how many verts

    while(nVerts > 0)
    {
        int currentVertex = noSuccessors();


        if(currentVertex == -1)
        {
            System.out.println("ERROR: Graph has cycles");
            return;
        }

        sortedDepArray[nVerts - 1] = vertexList[currentVertex].department;
        sortedCrsNumArray[nVerts - 1] = vertexList[currentVertex].courseNum;
        deleteVertex(currentVertex);        
    } //end while
    System.out.println("Topologically sorted order: ");
    for(int j = 0; j < orig_nVerts; j++)
        System.out.print(sortedDepArray[j] + sortedCrsNumArray[j] + " ");

}//end topo()

我需要做的是找到没有任何后继者的特定传递中的所有顶点,并按课程编号对它们进行排序(每个顶点包含一个部门和课程编号,例如CS140)。这是实际的描述:

  

在拓扑排序期间,选择没有后继者的节点时:   首先,找到所有这些顶点,   然后,根据课程编号(整数部分)选择课程,这些课程往往会让学生首先参加较低级别的课程。也就是说,如果候选人遇到了我:M152,M131和CS140,你应该选择M152让它出现在后面。

非常感谢任何建议!

修改
这是我到目前为止所尝试的:

while(nVerts > 0)
    {
        int currentVertex = noSuccessors();

        if(currentVertex == -1)
        {
            System.out.println("ERROR: Graph has cycles");
            return;
        }

        Vertex currVert = vertexList[currentVertex];
        int currCourseNum = currVert.courseNum;
        if(sortedCrsNumArray.length != 0)
        {
            if(currCourseNum > sortedCrsNumArray[nVerts - 1])
            {
                sortedCrsNumArray[nVerts - 2] = sortedCrsNumArray[nVerts - 1];
                sortedDepArray[nVerts - 2] = sortedDepArray[nVerts - 1];
            }
        }

        sortedDepArray[nVerts - 1] = vertexList[currentVertex].department;
        sortedCrsNumArray[nVerts - 1] = vertexList[currentVertex].courseNum;
        deleteVertex(currentVertex);

    } //end while

但是我得到一个ArrayIndexOutOfBoundsException:  sortedCrsNumArray[nVerts - 2] = sortedCrsNumArray[nVerts - 1];

0 个答案:

没有答案