typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
char data;
int count;
ArcNode *firstarc;
}VNode;
typedef struct AGraph{
VNode *adjlist[maxsize];
int n,e;
}AGraph;
int Topsort(AGraph *G){
int i,j,k=0;
int stack[maxsize],top=-1;
ArcNode *p;
for(i=0;i<G.n;i++){
if(G->adjlist[i].count==0)
stack[++p]=i;
}
while(p!=-1){
i=stack[top--];
++k;
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(k==G.n)
return 1;
else
return 0;
}