#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int adjvex;
struct node*next;
}EdgeNode;
typedef struct vnode
{
int indegree;
int vertex;
EdgeNode *firstedge;
}VertexNode;
void Top_Sort(VertexNode g[],int n)
{
int i,j,k,top,m=0;
EdgeNode *p;
top=-1;
for(i=0;i<n;i++)
if(g[i].indegree0)
{
g[i].indegree=top;
top=i;
}
while(top!=-1)
{
j=top;
top=g[top].indegree;
printf("%d",g[i].vertex);
m++;
p=g[i].firstedge;
while(p!=NULL)
{
k=p->adjvex;
g[k].indegree–;
if(g[k].indegree0)
{
g[k].indegree=top;
top=k;
}
p=p->next;
}
}
if(m<n)
printf("the AOV network has a cycle\n");
}
/*void creatAdjlist(VertexNode g[],int e,int n)
{
EdgeNode *p;
int i,j,k;
printf(“initialize\n”);
for(i=0;i<n;i++)//初始化顶点信息
{
g[i].vertex=i;
g[i].firstedge=NULL;
g[i].indegree=0;
}
for(k=1;k<=e;k++)
{
printf("input edge of(i->j))\n");
scanf("%d%d",&i,&j);
p=(EdgeNode*)malloc(sizeof(EdgeNode));
p->adjvex=j;
p->next=g[i].firstedge;
g[i].firstedge=p;
g[j].indegree+=1;
}
}*/
int main()
{
VertexNode g[6];
creatAdjlist(g,8,6);
Top_Sort(g,6);
return 0;
}