前言
DFS 判断有向图是否存在环
vis :DFS 遍历的结果
trace:也是遍历的结果,需要对结果进行分析,找到重复值时,判断重复值的索引位置,依次进行遍历,输出结果
手绘有向图
程序
##
graph = {
"a": ["b", "c"],
"b": ["a", "d"],
"c": ["a", "d"],
# "d": [ "e"],
"d": ["c", "e"], # add loop
"e": ["d"]
}
# print(graph["a"])
vis = []
trace = []
def dfs(v):
if v in vis:
if v in trace:
v_index = trace.index(v)
print("有环:")
for i in range(v_index, len(trace)):
print(trace[i] + ' ', end='')
print(v)
print("\n")
return
return
vis.append(v)
trace.append(v)
for vs in graph[v]:
dfs(vs)
trace.pop()
# print(vis)
# return vis
dfs("a")
# print(dfs("a"))
# print(vis)
结果展示
有环:
a b a
有环:
a b d c a
有环:
d c d
有环:
d e d