您的位置:首页 > 其它

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

2010-02-02 20:25 204 查看
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;
  }
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储