Python图形实现中的循环检测
我正在尝试用python实现一个循环检测器。本质上,该算法应用BFS并将每个节点标记为-1(未访问)、0(正在工作)或1(已访问)。我的算法扫描邻居,如果邻居的状态为0,则检测到一个循环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'] } 我似乎找不到
# 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)