代码实现
def has_cycle(G):
"""
判断无向图是否有环
:param G: example {0: [1,2],1: [3], 2: []}
:return:True无环,False有环
"""
V = set()
U = dict()
cycle_set = []
def dfs(u, v):
V.add(u)
for x in G.get(u, []):
if x not in V:
U[x] = u
dfs(x, u)
elif x != v:
try:
path = []
_x = u
while _x != x:
path.insert(0, _x)
_x = U[_x]
path.insert(0, _x)
except:
path = []
cycle_set.append(path + [x])
for x in G:
if x not in V:
dfs(x, x)
return len(cycle_set) == 0