教学计划安排检验程序(拓扑排序)报告书(7)
时间:2025-07-10
时间:2025-07-10
示例数据:输入:学期数:5,课程数:12,课程间的先后关系数:16,课程的代表值:v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12。课程间两两间的先后关系:v1 v2,v1 v3, v1 v4,v1 v12,v2 v3,v3 v5,v3 v7,v3 v8,v4 v5, v5 v7,v6 v8,v9 v10, v9 v11 , v9 v12,v10 v12,v11 v6输出:第1学期应学的课程:v1 v9第2学期应学的课程:v2 v4 v10 v11第3学期应学的课程:v3 v6 v12第4学期应学的课程:v5 v8第5学期应学的课程:v7
p->adjvex=w-1;
p->nextarc=G.vertices[v-1].firstarc; G.vertices[v-1].firstarc=p; }
return OK; }
void FindInDegree(ALGraph G) {
ArcNode* p;
for(int i=0;i<G.vexnum;i++) {
p=G.vertices[i].firstarc; while(p) {
for(int j=0;j<G.vexnum;j++) if(p->adjvex==j) indegree[j]++; p=p->nextarc; } } }
Status TopologicalSort(ALGraph G) {
SqStack S1,S2; ArcNode* p; int i,count,k; FindInDegree(G); InitStack(S1); InitStack(S2);
for(i=0;i<G.vexnum;++i) if(!indegree[i]) Push(S1,i); count=0;
while(!StackEmpty(S1)) {
printf("第%d学期应学的课程:",count+1); while(!StackEmpty(S1)) {
Pop(S1,i);
printf("%s ",G.vertices[i].data); Push(S2,i); }
printf("\n");
count++; while(!StackEmpty(S2)) {
下一篇:化验工培训教案