数据结构拓展习题:图拓扑排序判断环路
题目:改造拓扑排序算法,用以判断有向图是否有环路存在。



bool ExitCircle(ALGraph G)
{
int* degree = (int*)malloc(G.vexnum * sizeof(int));
NodeDegree(G, degree);
Sqstack S;//零入度的顶点栈
InitStack(S);
int v;
for (v = 0; v < G.vexnum; v++)
{
if (!degree[v])//入度为0则进栈
Push(S, v);
}
int count = 0;
AcrNode* p;
while (!StackEmpty(S))
{
int i = Pop(S);
count++;
for (p = G.vertices[i].firstarc; p != NULL; p = p->nextarc)
{
int k = p->adjvex;
if (--degree[k] == 0)//如果入度减为0则入栈
Push(S, k);
}
}
if (count < G.vexnum)
return true;
return false;
}