如果有循环,我希望它返回true,如果没有则返回false。如果每个节点只有一个边...
例如:
walkways_info = """\
U 3
0 1
1 2
2 0
"""'
print(interesting_path_feasible(walkways_info))
但是当每个节点有多个边时,它不起作用,因为字典不包含多个值。
例如:
walkways_info = """\
U 7
1 2
1 5
1 6
2 3
2 5
3 4
4 5
"""
我该如何解决这个问题? 在此先感谢:)
def interesting_path_feasible(walkways_info_str):
"""Determines if a cycle exists"""
graph_dict = dict(e.split(' ') for e in walkways_info_str.splitlines())
visited = set()
path = [object()]
path_set = set(path)
stack = [iter(graph_dict)]
while stack:
for node in stack[-1]:
if node in path_set:
return True
elif node not in visited:
visited.add(node)
path.append(node)
path_set.add(node)
stack.append(iter(graph_dict.get(node, ())))
break
else:
path_set.remove(path.pop())
stack.pop()
return False
答案 0 :(得分:2)
将值设为列表,例如
a["abc"] = [1, 2, "bob"]
有几种方法可以为key添加值,并创建一个列表(如果尚未存在的话)。我将在几步之内展示一种这样的方法。
key = "somekey"
a.setdefault(key, [])
a[key].append(1)
结果:
a {'somekey': [1]}
接下来,尝试:
key = "somekey"
a.setdefault(key, [])
a[key].append(2)
结果:
a {'somekey': [1, 2]}
setdefault的神奇之处在于,如果未定义该键,则初始化该键的值,否则它不执行任何操作。现在,注意到setdefault返回密钥,您可以将它们组合成一行:
a.setdefault("somekey",[]).append("bob")
结果:
a {'somekey': [1, 2, 'bob']}