算法:TopSort
输入:有向图
输出:拓扑排序
1.栈s初始化;累加器count初始化;
2.扫描顶点表,将入度为0的顶点压栈;
3.当栈s非空时循环
3.1 j=栈顶元素出栈;输出顶点j;count++;
3.2 对顶点j的每一个邻接点k执行下述操作:
3.2.1将顶点k的入度减1;
3.2.2如果顶点k的入度为0,则将顶点k入栈;
4.if(count<vertexNum) 输出有回路信息;
void TopSort()
{
int i,j,k,count=0;
int S[MaxSize],top=-1;
EdgeNode*p=nullptr;
for(i=0;i<vertexNum;i++)
if(adjlist[i].in==0) S[++top]=i;
while(top!=-1)
{
j=S[top--];
cout<<adjlist[j].vertex;
count++;
p=adjlist[j].firstEdge;
while(p!=nullptr)
{
k=p->adjvex;
adjlist[k].in--;
if(adjlist[k].in==0) S[++top]=k;
p=p->next;
}
}
if(count<vertexNum) cout<<"有回路";
}