DFS,在无向图中查找圆

时间:2016-03-07 09:52:12

标签: graph geometry depth-first-search

这是我处理这个问题的方法。但似乎这并不像我预期的那样有效。怎么了?

def dfs(graph, start, visited = None): '''find if there is a circle in the graph, if there is ,return True''' if visited == None: visited = set() visited.add(start) for next in graph[start]: if next in visited: return True else: dfs(graph, next, visited) return False

1 个答案:

答案 0 :(得分:0)

由于它是一个无向图,你必须照顾当前节点的父节点,假设你从节点1到节点2,然后在遍历节点2的边缘时你将再次找到节点1并且它已经被访问所以答案将返回true,即循环存在,但可能不是这种情况,因此您需要添加另一个参数来检查相邻节点是否不是当前节点的父节点。这里父节点引用DFS遍历中当前节点的前一个前导。