void TopSort(AdjGraph* G) { int i; int St[MAXV], top = -1; ArcNode* p; for (i = 0; i < G->n; i++) G->adjlist[i].count = 0; for (i = 0; i < G->n; i++) { p = G->adjlist[i].firstarc; while (p != NULL) { G->adjlist[p->adjvex].count++; p = p->nextarc; } } for (i = 0; i < G->n; i++) { if (G->adjlist[i].count == 0) St[++top] = i; } while(top > -1) { i = St[top--]; printf("%d", i); p = G->adjlist[i].firstarc; while (p != NULL) { G->adjlist[p->adjvex].count--; if (G->adjlist[p->adjvex].count == 0) St[++top] = p->adjvex; p = p->nextarc; } } }
拓扑排序
原文:https://www.cnblogs.com/KIROsola/p/11915488.html