void toposort()
{//
int s[n0+1]; //存储入度为0的节点的栈
int t; //栈点指针
int i; //仅仅是Index
int j;
arcnode* p; //
for(i=1;i<=n;i++)
{
if(adjlist[i].degree == 0)
{//如果i节点的入度为0
s[++t] = i;//入栈
}
}//得到了所有入度为0的节点
while(t)
{//当入度为0的节点栈不为空
i=s[t--];//出栈
cout<<i<<","; //就是topo序列的输出
p = adjlist[i].first;//得到i邻接的第一个节点
//下面是把所有i邻接的节点的入度都减1
while(p)
{//如果这个边存在
j = p->vertext;
adjlist[j].degree--;
if(adjlist[j].degree == 0)
{//如果这个节点的入度也为0了,也入栈
s[++t] = j;
}
p = p->next;
}
}
}