您的位置:首页 > 其它

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

2009-09-27 14:48 253 查看
拓扑排序

(1)在有向图中选一个没有前驱的顶点且输出之
(2)从图中删除该顶点和所有以它为尾的弧。
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止,后一种情况则说明有向图中存在环。

可采用邻接表作为有向图的存储结构。具体算法如下:
int   TopoSort(ALGraph   G)
{
FindInDegree(G,indegree);         //对各顶点求入度
InitStack(S);
for(i=0;i<G.vexnum;++i)
if(!indegree[i])Push(S,i);       //入度为0者进栈
count=0;
while(!StackEmpty(S))
{
Pop(S,i);
printf("i,G.vertices[i].data");
++count;
for(p=G.vertices[i].firstarc;   p;   p=p->nextarc)
{
k=p->adjvex;
if(!(--indegree[k]))Push(S,k);     //若入度减为0,则入栈
}
}
if(count<G.vexnum)return   0;     //该有向图存在环
else
return   1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐