Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python图形实现中的循环检测_Python_Breadth First Search - Fatal编程技术网

Python图形实现中的循环检测

Python图形实现中的循环检测,python,breadth-first-search,Python,Breadth First Search,我正在尝试用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'], 'E': ['B', 'D'] } 我似乎找不到

我正在尝试用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'],
    'E': ['B', 'D']
}

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

遍历
函数中,
循环
变量是局部变量。所以

cycle=True
局部变量
循环
设置为
,对全局
循环
变量没有影响

返回函数中的值

def遍历(图形):
周期=假
... # 原始函数
返回周期
循环=遍历(图形)
打印(循环)
或者将
循环
变量标记为全局变量

cycle=False#此处为全局变量
def遍历(图形):
全球循环
... # 原始函数
遍历(图)
打印(循环)

遍历
函数中,
循环
变量是局部变量。所以

cycle=True
局部变量
循环
设置为
,对全局
循环
变量没有影响

返回函数中的值

def遍历(图形):
周期=假
... # 原始函数
返回周期
循环=遍历(图形)
打印(循环)
或者将
循环
变量标记为全局变量

cycle=False#此处为全局变量
def遍历(图形):
全球循环
... # 原始函数
遍历(图)
打印(循环)
但是
循环
在循环的后面(至少在操作代码中)不会被设置回
False
。另外,如果您只对循环的存在感兴趣,那么立即
return
也可以,但如果您想遍历所有节点,则立即
return
可能不是正确的选择,但是
cycle
在循环的后面(至少在操作代码中)不会被设置回
False
。另外,如果您只对循环的存在感兴趣,那么立即
return
也可以,但如果您希望遍历所有节点,则这不是正确的选择
# 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)