原创作品,转载请注明出处
这个代码是我在上一篇博文之前写的,当时只是简单地使用数组来代表一个图。拓扑排序的关键在于不停地寻找入度为0的点,如果算法还没有结束就找不到入度为0的点了,那么这个图中肯定有圈,这也是拓扑排序的一个应用,可以找到一个图中是否有圈。
另一个应用是发现一条贯穿所有节点的通路。
void topsort(){ int stack[vertexnum]; int i = 0; int j = 0; int tmp; node *adjacent; for(i = 0;i<11;i++) { if(at[i].degree == 0) stack[j++] = i; } if(j == 0) { printf("there is a circle\n"); return; } do{ tmp = stack[--j]; printf("%d\t",tmp); adjacent = at[tmp].adjacentlist; while(adjacent) { if(!--at[adjacent->i].degree) stack[j++] = adjacent->i; adjacent =adjacent->next; } }while(j>0); printf("\n");}