采用邻接表为图的存储结构。邻接表的定义见<图的生成算法>。
算法如下:
void topoSort(ALGraph *G) {
int i, v, indegree[G->vexnum];
ArcNode *p;
int stack[50], top = 0;
memset(indegree, 0, sizeof(indegree));
//find indegree
for (i = 0;i < G->vexnum;i++) {
for (p = G->vertices[i].firstarc;p;p = p->nextarc)
indegree[p->adjvex]++;
}
printf("\nTopological Sort:\n");
for (i = 0;i < G->vexnum;i++) {
//printf("%d ", indegree[i]);
if (indegree[i] == 0)
stack[top++] = i;
}
while (top > 0) {
v = stack[--top];
printf("V%d ", v + 1); //输出顶点
for (p = G->vertices[v].firstarc;p;p = p->nextarc)
if (--indegree[p->adjvex] == 0) //若入度减为0则入栈
stack[top++] = p->adjvex;
}// while
printf("\n");
}
/**
6
1 2 0
1 3 0
1 4 0
3 2 0
3 5 0
4 5 0
6 4 0
6 5 0
0 0 0
*/
测试输出: