标题:拓扑排序 C语言代码
只看楼主
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
得分:0 
回复 5楼 xichong
厉害
2010-06-02 18:51
ljwei
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:46
专家分:192
注 册:2009-9-18
得分:0 
学习学习
2010-06-03 08:35
掷地有声
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-11
得分:0 
邻接表的


void Topo(ALGraph G)                        //拓扑排序
   {int i,j,k;
    int count,top;
    ArcNode *p;
    printf("\nBy ToPo\n");
    top=-1;                                  //姑且当作栈的初始化吧
    count=0;                                //打印计数
    for(i=0;i<G.vexnum;i++)
      {if(G.Vertice[i].indegree==0)
     {G.Vertice[i].indegree=top;            //indegree域中存的是栈的下一个元素的存储位置
      top=i;                              //top用来记录栈的首元素存储的位置
      }
      }                                     //让入度为0的顶点入栈

    while(top!=-1)                         //top等于初值时表示栈空了
      {j=top;
       top=G.Vertice[j].indegree;           //这两句是出栈的操作
       printf("%d ",G.Vertice[j].data);       //出栈打印节点信息
       count++;                           //打印节点累加
       for(p=G.Vertice[j].firstarc;p;p=p->next) //出栈一个将与该顶点有后继关系的的顶点的入度减1
         {
         k=p->adj;
         if(!(--G.Vertice[k].indegree))         //此处实现减1操作,如果减1后度为零则入栈
            {G.Vertice[k].indegree=top;
            top=k;
           }//if
         }//for
       }//while
       if(count==G.vexnum)                //判断是否有环,相等则无环,否则有环
          printf("\nNO circle\n");
       else
          printf("\nHAVE circle\n");
   }

2010-06-22 17:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-308623-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.177775 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved