我有一个问题,要求一个算法检测任何包含任何给定边'E'的无向图中是否有任何循环。算法应该在O(N)线性时间内运行。
我遇到的问题是我不知道从哪里开始。我有一些简单的示例图,但我不知道从那里去哪里。
任何提示?
答案 0 :(得分:4)
从G中取出边缘(u,v) 1.运行BFS以查看是否仍可从u访问v。 2.如果是,则原始图形具有包含e的循环。否则没有。
答案 1 :(得分:2)
首先进行深度搜索,然后在返回时将节点添加到列表中,并在返回时从列表中删除它们。
该列表代表您当前的遍历路径。
如果您遇到列表中已有的节点,则会出现循环/循环。
答案 2 :(得分:0)
你从边缘'e'开始。从它你应该得到它连接的两个顶点。从它们中你可以获得其他边缘和其他顶点,以及其他边缘和其他顶点,并且...您需要一种方法来确定您的算法是否已经“访问过”顶点。如果它有,那么'e'就是一个循环。
答案 3 :(得分:0)
对于边缘(u,v):
1-从u开始执行深度优先搜索,确定是否找到v并且沿着v的路径存在后边缘。
2-从v执行深度优先搜索,如果找到u并且后边缘存在于u,那么有一个包含u和v的循环。
换句话说,
1-从u开始执行DFS,检查后边缘是否存在且v还没有完成。
2-从v开始执行DFS,检查后边缘是否存在且u尚未完成 如果两个条件都为真,那么edge(u,v)属于一个循环。
答案 4 :(得分:0)
在G上运行DFS,然后执行以下操作。考虑第一次穿越边缘e。
有两种情况: