微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python图实现中的循环检测

如何解决Python图实现中的循环检测

我正在尝试在python中实现一个循环探测器。本质上,该算法应用BFS,并将每个节点标记为-1(未访问),0(正在工作)或1(已访问)。我的算法扫描邻居,如果邻居的状态为0,则检测到周期。

# this is a non-directed graph in nature
graph = {
    'A': ['B','C'],'B': ['D','E'],'C': [],'D': ['B','E': ['B','D']
}
# 1 means visited 0 means in queue and -1 means not touched yet

status = {node: -1 for node in graph}

start = 'A'
queue = [start]
cycle = False
    
def traversal(graph): 
    start = queue.pop(-1)
    for node in graph[start]:
        if status[node] == -1:
            queue.append(node)
            status[node] = 0
        if status[node] == 0:
            cycle = True
    if queue:
        status[start] = 1
        traversal(graph)

traversal(graph)
print(cycle)    

我似乎找不到代码的问题。有人可以指出吗?

解决方法

traversal函数中,cycle变量是局部变量。所以

cycle = True

本地变量cycle设置为True,对全局 cycle变量无效。

return或您函数中的值

def traversal(graph): 
    cycle = False
    ... # the original function
    return cycle

cycle = traversal(graph)
print(cycle)

或将cycle变量标记为全局变量

cycle = False # global variable here
def traversal(graph): 
    global cycle
    ... # the original function

traversal(graph)
print(cycle)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。