Magic347
2016-04-22 22:41:59 +08:00
事实上如果考虑一个更一般化的问题,那么这个问题就演变成一个在有向图内检测闭环的问题了。
解法会复杂一些,具体办法也是仿照上面的办法,只是需要枚举图内的所有节点,依次判断以每个节点作为起始节点深度优先遍历该图时是否形成环路。一旦发现任意节点存在环路的话,就认为该有向图是存在闭环的。
例如类似这样的图关系: A -> B <- C -> D -> E -> C
def dfs_check_loop(node, has_loop, visited):
____for next_node in node.get_next_nodes():
________if not visited[next_node]:
____________visited[node] = True
____________dfs_check_loop(next_node, has_loop, visited)
____________visited[node] = False
________else: has_loop = True
def check_loop_graph(graph):
____for node in graph.get_all_nodes():
________visited = {}
________visited[node] = True
________has_loop = False
________dfs_check_loop(node, has_loop, visited)
________if has_loop:
____________return True
____return False