我正在做一个项目,我正在使用拓扑排序找到基于先决条件的逻辑课程序列。这是我的排序方法:
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];
。