数据结构拓扑排序

算法: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<<"有回路";
}   

猜你喜欢

转载自blog.csdn.net/qq_51344334/article/details/120038808