【发布时间】:2013-11-15 09:37:56
【问题描述】:
我正在尝试构建一种算法,该算法返回构成无向图中的一个循环的路径节点(如果有的话)。到目前为止,我所做的是在图上执行 DFS,直到我到达一个未发现的边缘,导致一个发现的节点(那时我知道有一个循环)。但是我怎么知道是哪条路径形成了循环。如果我使用堆栈/队列来记录我的路径,这对我有什么帮助?假设我从一个不属于循环路径的节点开始,我以后怎么知道将其从堆栈/队列中取出?
任何建议将不胜感激。
【问题讨论】:
-
你可以做到这一点。当你碰到一个未发现的边缘导致一个发现的节点时,沿着边缘往回走,直到你回到同一个节点,你越过的那些边缘和节点将成为你循环的一部分。但是,这种方法一定会找到任何循环吗?我不确定。
-
是的,但我如何“走”回来?
-
如果您在遍历节点时添加节点,只需将它们弹出...否则,您可以创建自己的类型来保存您需要的任何信息...
-
是的,但是当我走过它们时,我的道路可能非常崎岖不平。我可以分支到一个没有循环的地方(在寻找循环的路上),我怎么知道不包括那个路径。
-
你需要任何循环还是有一些要求(它必须在特定节点开始/结束;必须访问所有节点等)?
标签: algorithm graph graph-theory