社区
C++ 语言
帖子详情
如何判断一个有向图中是否含有环路?
bit01
2006-11-13 07:00:15
一直没想明白,不知大家有没有好的算法?使时间,空间复杂度都最小。
...全文
1128
6
打赏
收藏
如何判断一个有向图中是否含有环路?
一直没想明白,不知大家有没有好的算法?使时间,空间复杂度都最小。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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的就表示有环。
Java版查找并打印
有向图
中
的所有
环路
径
最近想写
一个
识别线程死锁的算法,在网上找了半天没有合适的代码,自己写了个查找
有向图
中
的环的代码(可以将死锁的资源依赖建模成含环的
有向图
)。本代码经过充分测试,内部有详细说明,可以放心下载。
有向图
寻找
环路
python_
有向图
中
打印所有的
环路
最近项目
中
需要研究了一下
有向图
的
环路
问题。
一个
IT企业
中
有成千上万个应用,各个应用之间都是相互依赖的,
一个
用户请求进来后,会调用一系列应用,比如A调B、B调C、C调D等。这样所有的应用形成
一个
有向图
,那么如果这个
有向图
中
出现了
环路
,就悲剧了,用户的请求如果进入这个
环路
,那么他永远也得不到响应。所以就有需要去
判断
这个应用组成的
有向图
中
是否
含有
环路
,如果有就要打印出所有的
环路
,想办法将这些
环路
拆解。说...
有向图
中
打印所有的
环路
最近项目
中
需要研究了一下
有向图
的
环路
问题。
一个
IT企业
中
有成千上万个应用,各个应用之间都是相互依赖的,
一个
用户请求进来后,会调用一系列应用,比如A调B、B调C、C调D等。这样所有的应用形成
一个
有向图
,那么如果这个
有向图
中
出现了
环路
,就悲剧了,用户的请求如果进入这个
环路
,那么他永远也得不到响应。所以就有需要去
判断
这个应用组成的
有向图
中
是否
含有
环路
,如果有就要打印出所有的
环路
,想办法将这些
环路
拆解...
有向图
中
环路
检测
对于一幅
有向图
, 能够有效检测其
中
可能存在的
环路
是非常重要的,因为一些问题在存在
环路
的图
中
不存在解决方案, 例如对于
有向图
的拓扑排序. 通常, 对于一幅
有向图
, 我们仅需
判断
其
是否
存在
环路
, 因此当找到第
一个
环路
时,我们即可终止, 无需搜索图
中
所有
环路
. 以下介绍一种基于深度优先搜索(递归)的
环路
检测方法. 1.首先, 对节点进行递归的深度优先搜索时, 当前函数栈自然地维护了从栈底到栈顶的一条可达...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章