📅  最后修改于: 2023-12-03 14:58:31.117000             🧑  作者: Mango
该问题主要涉及到有向图中环的检测。 环是指沿着有向路径可以回到原始节点的路径。
给定有向图的邻接列表表示,需要检查其是否有环存在。
一种检测图中环的方法是使用深度优先搜索(DFS)。将每个节点标记为未访问、正在访问、已访问。对于每个未访问的节点,遍历其邻居。如果邻居已经被标记为正在访问,则存在环。如果邻居已经被标记为已访问,则跳过。如果没有找到环,则将该节点标记为已访问。
以下是该算法的python实现:
def has_cycle(adj_list):
visited = [False] * len(adj_list)
stack = [False] * len(adj_list)
def dfs(node):
visited[node] = True
stack[node] = True
for neighbor in adj_list[node]:
if not visited[neighbor]:
if dfs(neighbor):
return True
elif stack[neighbor]:
return True
stack[node] = False
return False
for node in range(len(adj_list)):
if not visited[node]:
if dfs(node):
return True
return False
该算法使用DFS遍历整个图,每个节点都会被访问一次,每次遍历的时间复杂度为O(V+E),其中V为节点数,E为边数。总时间复杂度为O(V+E)。
通过使用DFS来检测有向图中的环,可以快速而有效地找出环的存在。复杂度也比较优秀,非常适合一些小型有向图的检测。