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