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

bit01 2006-11-13 07:00:15
一直没想明白,不知大家有没有好的算法?使时间,空间复杂度都最小。
...全文
1050 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bit01 2006-11-15
好的,我结帐!
  • 打赏
  • 举报
回复
lei001 2006-11-13
mark
  • 打赏
  • 举报
回复
sdulyx 2006-11-13
顶3楼的
  • 打赏
  • 举报
回复
nule 2006-11-13
正是楼上这种思路。
如果仅仅是需要知道是否有环,则找到环就可以停止了,不用全部遍历。
  • 打赏
  • 举报
回复
Aaron_Jerry 2006-11-13
拓扑排序

(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;
}
  • 打赏
  • 举报
回复
nule 2006-11-13
每个节点都设置一个bool变量,默认为false,走一遍就设置一个true,如果见到已经设为true的就表示有环。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2006-11-13 07:00
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下