马和人做人和牛做网站/网址大全123
算法: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<<"有回路";
}