/**
本题有各种答案,无论是学姐的还是红皮书都是错误的。
正确思想在于采用拓扑排序,也是本题考点。深度优先搜索等无法解决。
**/
typedef struct VNode
{
char data;
int no;
int count;
ArcNode *firstarc;
}VNode;//重新定义邻接表表头结点
int TopSort(AGraph *G)
{
int i,j ,n=0;
int stack[maxSize],top=-1;//定义并初始化栈
ArcNode *p;
for(i=1;i<G->n;++i)
{
if(G->adjlist[i].count==0) stack[++top]=i;
}
while(top!=-1)
{
i=stack[top--];
++n;//计数器加1
G->adjlist[i].no=n;//将整形序号赋值给结点
p=G->adjlist[i].firstarc;
while(p!=NULL)
{
j=p->adjvex;
--(G->adjlist[j].count);
if(G->adjlist[j].count==0) stack[++top]=j;
p=p->nextarc;
}
}
if(n==G->n)
return 1;
else
return 0;
}