如何用BFS判断有向图中是否有环(DFS的不用说了...)?

qingyaoli 2008-10-23 05:17:57
RT
...全文
2576 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Debugcool 2012-01-19
  • 打赏
  • 举报
回复
因为是有向图,问题就变得很简单了,直接正常BFS,如果遇到之前已经遇到过的点的话,就证明图中有环。
nikun_ 2012-01-18
  • 打赏
  • 举报
回复
LZ说的是拓扑排序吗?
Starry314 2012-01-09
  • 打赏
  • 举报
回复
用BFS遍历有向图,遍历过的点hash掉。。
如果新遍历的点已经被hash过了,那么就出现环了。。
假设u->v
当遍历到v的时候,v被hash过了,那么就出现环了。。。

如果要打印出环的话,那么就需要记录每个点的前驱。然后从u点递归上去,当递归到v的时候,开始回溯,在回溯的过程输出每个点就好了。。

下午有考试,代码就不写了。。
RKJ 2012-01-08
  • 打赏
  • 举报
回复 2
[Quote=引用 1 楼 zeninpalm 的回复:]

奇怪,居然没有人回答!很简单,每次新添加一层节点后,检查是否当中任何一个节点与同一层另一个节点之间有边,若有,必是一个环。如果要打印出这个环,在做BFS的同时,每添加一个节点v进来,为该节点记录(u,v),u是与v相连的上层节点,检测到环后,只要分别顺着v1,v2两个节点的上层节点列表,直到为同一个为止
[/Quote]

1楼的回答恐怕不行吧,如A->B,A->C,B->C显然符合你说的情况,但A、B、C不构成环啊。
wendyyue1986 2008-10-26
  • 打赏
  • 举报
回复
楼主正解
ZenInPalm 2008-10-24
  • 打赏
  • 举报
回复
奇怪,居然没有人回答!很简单,每次新添加一层节点后,检查是否当中任何一个节点与同一层另一个节点之间有边,若有,必是一个环。如果要打印出这个环,在做BFS的同时,每添加一个节点v进来,为该节点记录(u,v),u是与v相连的上层节点,检测到环后,只要分别顺着v1,v2两个节点的上层节点列表,直到为同一个为止

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧