检测图中的循环

2024-09-30 14:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

如果有一个循环,我希望它返回true,如果没有,则返回false。如果每个节点只有一条边。。。在

例如:

walkways_info = """\
U 3
0 1
1 2
2 0
"""'

print(interesting_path_feasible(walkways_info))

但是当每个节点有多个边时,它就不起作用了,因为字典不包含多个值。在

例如:

^{pr2}$

我该怎么解决这个问题? 提前感谢:)

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 

Tags: pathininfonodeif节点stackdict
1条回答
网友
1楼 · 发布于 2024-09-30 14:31:32

将值列为一个列表,例如

a["abc"] = [1, 2, "bob"]

有两种方法可以向键添加值,如果还没有,还可以创建一个列表。我将分几个步骤展示一种这样的方法。在

^{pr2}$

结果:

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']}

相关问题 更多 >