如何判断一个有向图中是否含有环路?

拓扑排序   
    
  (1)在有向图中选一个没有前驱的顶点且输出之   
  (2)从图中删除该顶点和所有以它为尾的弧。   
  重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止,后一种情况则说明有向图中存在环。   
    
  可采用邻接表作为有向图的存储结构。具体算法如下:   

[cpp]  view plain
  1. int   TopoSort(ALGraph   G)     
  2. {     
  3.         FindInDegree(G,indegree);         //对各顶点求入度     
  4.         InitStack(S);     
  5.         for(i=0;i<G.vexnum;++i)     
  6.                 if(!indegree[i])Push(S,i);       //入度为0者进栈     
  7.         count=0;     
  8.         while(!StackEmpty(S))     
  9.       {       
  10.               Pop(S,i);     
  11.               printf("i,G.vertices[i].data");     
  12.               ++count;     
  13.               for(p=G.vertices[i].firstarc;   p;   p=p->nextarc)     
  14.               {     
  15.                       k=p->adjvex;     
  16.                       if(!(--indegree[k]))Push(S,k);     //若入度减为0,则入栈     
  17.               }     
  18.         }     
  19.         if(count<G.vexnum)return   0;     //该有向图存在环     
  20.         else     
  21.                 return   1;     
  22. }  

你可能感兴趣的:(如何判断一个有向图中是否含有环路?)