拓扑排序,使用邻接表来存储图

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;
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值