题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
bool TopSort( LGraph Graph, Vertex TopOrder[] )
{
PtrToAdjVNode e;
int top=0, cnt=0, in[Graph->Nv+10];
for(int i=0;i<Graph->Nv;i++) in[i]=0;
Vertex *sk;
sk=(Vertex *)malloc(Graph->Nv*sizeof(Vertex));
for(int i=0;i<Graph->Nv;i++)
{
for(e=Graph->G[i].FirstEdge; e; e=e->Next)
{
int k=e->AdjV;
in[k]++;
}
}
for(int i=0;i<Graph->Nv;i++)
if(in[i]==0) sk[++top]=i;
while(top!=0)
{
int tp=sk[top--];
TopOrder[cnt++]=tp;
for(e=Graph->G[tp].FirstEdge; e; e=e->Next)
{
int k=e->AdjV;
if(!(--in[k]))
sk[++top]=k;
}
}
if(cnt<Graph->Nv) return 0;
return 1;
}