判断有向图是否有环

来源:互联网 发布:linux查看文件多大命令 编辑:程序博客网 时间:2024/04/29 12:56

拓扑排序

 算法思想

1、在AOV网络中选一个没有直接前驱的顶点, 并输出之;

2、从图中删去该顶点, 同时删去所有它发出的有向边;

3、重复以上步骤, 直到

◆ 全部顶点均已输出,拓扑有序序列形成,拓扑排序完成

◆ 或者图中还有未输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,它们都有直接前驱,再也找不到没有前驱的顶点了。这时AOV网络中必定存在有向环

bool isLoop(ALGraph G,int *indegree)   //G是邻接表{      stack<int> s;    int i,k;      for(i=1;i<G.vexnum+1;i++)      {          if(!indegree[i])            s.push(i);     //入度为零的节点入栈    }      int count=0;      ArcNode *p;      while(!s.empty())      {          i = s.top();          s.pop();          count++;  //统计遍历过的节点个数        for(p=G.vertices[i].first;p;p=p->next)          {              k = p->adjvex;              indegree[k]--;              if(!indegree[k])                s.push(k);          }      }      if(count==G.vexnum)         return false;      return true;  }  







0 0
原创粉丝点击